├── .gitignore ├── LICENSE ├── Obj2SchemticConverter.py ├── README.md ├── config └── block_info.json ├── convert_obj2schematic.ipynb ├── empty_schematic ├── images ├── sample_obj_view.png └── sample_schematic_view.png └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | 132 | data/ 133 | .vscode/ 134 | 135 | *.schematic 136 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 takeshi noguchi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Obj2SchemticConverter.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pandas as pd 3 | import numpy as np 4 | import json 5 | from tqdm import tqdm 6 | import traceback 7 | import cv2 8 | 9 | import pywavefront 10 | from nbtlib import nbt, tag 11 | 12 | 13 | class Obj2SchematicConverter(object): 14 | def __init__(self, obj_path, output_dir, height_max, width_max): 15 | ''' 16 | constructor 17 | ''' 18 | # DataFrame Column 19 | self.coordinates = ['x', 'y', 'z'] 20 | self.colors = ['r', 'g', 'b'] 21 | self.denorm_colors = ['denorm_r', 'denorm_g', 'denorm_b'] 22 | self.coor_id = 'coordinate_id' 23 | 24 | if output_dir == None: 25 | self.output_dir = os.path.join( 26 | os.path.dirname(__file__), 'output') 27 | else: 28 | self.output_dir = output_dir 29 | self.HEIGHT_MAX = height_max 30 | self.WIDTH_MAX = width_max 31 | self.typical_colors = {} 32 | self.blocks = [] 33 | self.data = [] 34 | self.out_schem = os.path.splitext(os.path.basename(obj_path))[ 35 | 0] + '.schematic' 36 | 37 | # create .obj DataFrame 38 | self.df = self._create_obj_df(obj_path) 39 | 40 | self._preprocess_data() 41 | self._load_config() 42 | 43 | def _create_obj_df(self, obj_path): 44 | scene = pywavefront.Wavefront(obj_path) 45 | if len(scene.mtllibs) != 0: 46 | vertices = self._analyze_mtl(obj_path, scene) 47 | else: 48 | vertices = scene.vertices 49 | return pd.DataFrame( 50 | vertices, columns=self.coordinates + self.colors) 51 | 52 | def _analyze_mtl(self, obj_path, scene): 53 | is_first = True 54 | for _, material in scene.materials.items(): 55 | if is_first: 56 | is_first = False 57 | else: 58 | raise Exception('material should be single') 59 | img_name = material.texture.file_name 60 | img_path = os.path.join(os.path.dirname(obj_path), img_name) 61 | if not os.path.exists(img_path): 62 | raise Exception('mapping file does not exists') 63 | img = cv2.imread(img_path) 64 | img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 65 | h, w, _ = img.shape 66 | 67 | vt_colors = [] 68 | for v in self._get_whole_lines(obj_path): 69 | contents = v.split(' ') 70 | if contents[0] == 'vt': 71 | y = float(contents[1]) * (w - 1) 72 | x = float(contents[2]) * (h - 1) 73 | vt_colors.append(img_rgb[(w-1) - int(x), int(y)]) 74 | 75 | new_vertices = [] 76 | COLOR_MAX = 255 77 | for index, v in enumerate(scene.vertices): 78 | rgb = vt_colors[index] / COLOR_MAX 79 | new_vertices.append( 80 | (v[0], v[1], v[2], rgb[0], rgb[1], rgb[2])) 81 | return new_vertices 82 | 83 | def _get_whole_lines(self, path): 84 | with open(path, 'r') as f: 85 | return f.readlines() 86 | 87 | def _preprocess_data(self): 88 | ''' 89 | preprocess .obj data 90 | ''' 91 | print('start data preprocessing...') 92 | # coordinates 93 | self._move_to_zero_point() 94 | self._zoom_coordinates() 95 | self._round_down_coordinates() 96 | # color 97 | self._denormalize_color() 98 | 99 | self._add_coordinate_id_col() 100 | 101 | def _move_to_zero_point(self): 102 | ''' 103 | x,y,z座標を0始点に変換 104 | ''' 105 | self.df[self.coordinates] = self.df[self.coordinates] - \ 106 | self.df[self.coordinates].apply(min) 107 | 108 | def _zoom_coordinates(self): 109 | ''' 110 | 指定された最大値になるように座標値を拡大する 111 | ''' 112 | max_series = self.df[self.coordinates].apply(max) 113 | max_val = max_series.max() 114 | max_idx = max_series.idxmax() 115 | if max_idx in ['x', 'z']: 116 | zoom_ratio = self.WIDTH_MAX / max_val 117 | else: 118 | zoom_ratio = self.HEIGHT_MAX / max_val 119 | self.df[self.coordinates] = self.df[self.coordinates] * zoom_ratio 120 | 121 | def _round_down_coordinates(self): 122 | self.df[self.coordinates] = self.df[self.coordinates].apply( 123 | np.floor).astype(int) 124 | 125 | def _denormalize_color(self): 126 | ''' 127 | 正規化された色情報を復元する 128 | ''' 129 | COLOR_MAX = 255 130 | self.df[self.denorm_colors] = self.df[self.colors] * COLOR_MAX 131 | 132 | def _add_coordinate_id_col(self): 133 | ''' 134 | ボクセル位置を表す識別子用の列を追加 135 | ''' 136 | self.df[self.coor_id] = self.df[self.coordinates].apply( 137 | self._gen_coordinates_id, axis=1) 138 | 139 | def _gen_coordinates_id(self, row): 140 | ''' 141 | DataFrameの各行をコンマ区切りも文字列に変換する 142 | ''' 143 | return ','.join([str(v) for v in row.values]) 144 | 145 | def _load_config(self): 146 | with open(os.path.join(os.path.dirname(__file__), 'config/block_info.json'), 'r', encoding='utf-8') as f: 147 | self.config = json.load(f) 148 | 149 | def _calc_nearest_block(self, obj_color, config): 150 | best = float('inf') 151 | for c in config: 152 | p_color = c['COLOR'] 153 | diff = obj_color - p_color 154 | diff_dist = sum(diff ** 2) 155 | if best > diff_dist: 156 | best = diff_dist 157 | color_data = c 158 | if best == 0: 159 | break 160 | return color_data 161 | 162 | def convert(self): 163 | print('start converting...') 164 | voxels = self._calc_voxel_color() 165 | self._convert_to_block(voxels) 166 | 167 | def _calc_voxel_color(self): 168 | ''' 169 | 各ボクセルの色の代表値を決める 170 | ''' 171 | for coor_id_val in tqdm(set(self.df[self.coor_id])): 172 | target = self.df[self.df[self.coor_id] == 173 | coor_id_val][self.colors + self.denorm_colors] 174 | self.typical_colors[coor_id_val] = target.mean() 175 | 176 | # 177 | bounds_e = self.df[self.coordinates].apply(max) 178 | voxels = np.zeros( 179 | list((bounds_e + 1).apply(np.ceil).values.astype(int)) + [3]) 180 | for coor, color in tqdm(self.typical_colors.items()): 181 | x, y, z = [int(v) for v in coor.split(',')] 182 | voxels[x, y, z] = color[self.denorm_colors].values 183 | return voxels 184 | 185 | def _convert_to_block(self, voxels): 186 | self.width, self.height, self.length = voxels.shape[:3] 187 | for y in tqdm(range(self.height)): 188 | for z in range(self.length): 189 | for x in range(self.width): 190 | if (voxels[x, y, z] == 0).all(): 191 | # air 192 | self.blocks.append(0) 193 | self.data.append(0) 194 | else: 195 | color_data = self._calc_nearest_block( 196 | voxels[x, y, z], self.config) 197 | self.blocks.append(color_data['BLOCK_ID']) 198 | self.data.append(color_data['DATA']) 199 | 200 | def output(self): 201 | schem = nbt.load(os.path.join( 202 | os.path.dirname(__file__), 'empty_schematic')) 203 | out_path = os.path.join(self.output_dir, self.out_schem) 204 | os.makedirs(self.output_dir, exist_ok=True) 205 | self._packing(schem) 206 | self._save_schematic(out_path, schem) 207 | 208 | def _packing(self, schematic_obj): 209 | schematic_obj.root['Blocks'] = tag.ByteArray(self.blocks) 210 | schematic_obj.root['Data'] = tag.ByteArray(self.data) 211 | schematic_obj.root['Width'] = tag.Short(self.width) 212 | schematic_obj.root['Length'] = tag.Short(self.length) 213 | schematic_obj.root['Height'] = tag.Short(self.height) 214 | 215 | def _save_schematic(self, out_file, schematic_obj): 216 | schematic_obj.save(out_file) 217 | print('successfully finished: ', out_file) 218 | 219 | 220 | def get_args(): 221 | import argparse 222 | parser = argparse.ArgumentParser() 223 | parser.add_argument("obj_file", 224 | help="input .obj file path") 225 | parser.add_argument('--output_dir', type=str, default=None, 226 | help='Output dir of generated .schematic file.') 227 | parser.add_argument('--h_max', type=int, default=100, 228 | help='Max height of converted schematic object.') 229 | parser.add_argument('--w_max', type=int, default=100, 230 | help='Max width(length) of converted schematic object.') 231 | args = parser.parse_args() 232 | return args 233 | 234 | 235 | if __name__ == '__main__': 236 | try: 237 | print('checking arguments...') 238 | args = get_args() 239 | print('start converting...') 240 | converter = Obj2SchematicConverter( 241 | args.obj_file, args.output_dir, args.h_max, args.w_max) 242 | converter.convert() 243 | converter.output() 244 | except Exception as e: 245 | print('convert failed: ', e) 246 | print(traceback.format_exc()) 247 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # obj2schematic 2 | 3 | Convert [Wavefront `.obj` file](#Supported-`.obj`-format) to [Minecraft `.schematic` file](https://minecraft.gamepedia.com/Schematic_file_format) 4 | 5 | **input `.obj`** 6 | ![obj file](images/sample_obj_view.png) 7 | 8 | **output `.schematic`** 9 | ![schematic file](images/sample_schematic_view.png) 10 | 11 | ## Supported `.obj` format 12 | 13 | ### 1. geometric vertices with `(x, y, z, r, g, b)` 14 | 15 | From [Wavefront .obj file Wiki](https://en.wikipedia.org/wiki/Wavefront_.obj_file) 16 | 17 | > Geometric vertex 18 | A vertex can be specified in a line starting with the letter v. That is followed by (x,y,z[,w]) coordinates. W is optional and defaults to 1.0. **Some applications support vertex colors, by putting red, green and blue values after x y and z. The color values range from 0 to 1.** 19 | 20 | 21 | *`.obj` sample* 22 | 23 | ```txt 24 | # v (x) (y) (z) (red) (green) (blue) 25 | v -0.3438 -0.1250 0.0312 0.4563 0.3357 0.2624 26 | v -0.3438 -0.1250 0.0296 0.4552 0.3348 0.2617 27 | v -0.3438 -0.1256 0.0312 0.4548 0.3343 0.2613 28 | v -0.3438 -0.1250 0.0369 0.4579 0.3367 0.2631 29 | v -0.3444 -0.1172 0.0234 0.4736 0.3508 0.2737 30 | v -0.3438 -0.1172 0.0186 0.4751 0.3515 0.2738 31 | v -0.3438 -0.1223 0.0234 0.4610 0.3400 0.2655 32 | v -0.3448 -0.1172 0.0312 0.4752 0.3522 0.2750 33 | v -0.3438 -0.1247 0.0391 0.4596 0.3380 0.2640 34 | v -0.3446 -0.1172 0.0391 0.4747 0.3515 0.2741 35 | : 36 | ``` 37 | 38 | ### 2. `.obj` with `.mtl` 39 | 40 | *`.obj` sample* 41 | 42 | ```txt 43 | # OBJ File: 44 | 45 | mtllib ./result.mtl 46 | 47 | # vertices: 48 | v -9.1863 9.1863 -5.0000 49 | v -8.8947 9.1863 -5.0000 50 | v -8.6904 9.2796 -6.0667 51 | : 52 | 53 | # vertice textures: 54 | vt 0.0000 1.0000 55 | vt 0.0159 1.0000 56 | vt 0.0317 1.0000 57 | : 58 | 59 | # vertice normals: 60 | vn -0.0000 0.0000 1.0000 61 | vn -0.0000 0.0000 1.0000 62 | vn -0.0000 0.0000 1.0000 63 | : 64 | 65 | # faces: 66 | 67 | usemtl tex 68 | f 1/1/1 65/65/65 4097/4097/4097 69 | f 2/2/2 66/66/66 4098/4098/4098 70 | f 3/3/3 67/67/67 4099/4099/4099 71 | : 72 | ``` 73 | 74 | *`.mtl` sample* 75 | 76 | ```txt 77 | newmtl tex 78 | Ka 1.0000 1.0000 1.0000 79 | Kd 1.0000 1.0000 1.0000 80 | Ks 0.0000 0.0000 0.0000 81 | d 1.0 82 | illum 0 83 | map_Kd ./img.png 84 | ``` 85 | 86 | ## How to Use 87 | 88 | ### 1. Clone this repo 89 | 90 | ```bash 91 | $ git clone https://github.com/takecx/obj2schematic.git 92 | $ cd obj2schematic 93 | ``` 94 | 95 | ### 2. Create Environment 96 | 97 | You should create python environment using `requirements.txt`. 98 | 99 | ```bash 100 | $ conda create -n obj2schematic python=3.7 101 | $ conda activate obj2schematic 102 | $ pip install -r requirements.txt 103 | ``` 104 | 105 | ### 3. Prepare input `.obj` file 106 | 107 | Put input `.obj` file to `./data/` dir for example. 108 | 109 | ### 4. Run script 110 | 111 | Run `Obj2SchematicConverter.py` with some arguments. 112 | 113 | ```bash 114 | $ python Obj2SchemticConverter.py (.obj_file) --output_dir (output dir) --h_max (height max value) --w_max (width max value) 115 | ``` 116 | 117 | #### Arguments 118 | 119 | 1. input `.obj` file (**required**) 120 | 2. `--output_dir` : Output dir of generated .schematic file (optional) 121 | 3. `--h_max` : max height of converted schematic (optional) 122 | 4. `--w_max` : max width(length) of converted schematic (optional) 123 | 124 | For example, 125 | 126 | - input `.obj` file : `./data/sample_data.obj` 127 | - `--output_dir` : `./output/` 128 | - `--h_max` : `100` 129 | - `--w_max` : `150` 130 | 131 | then, you run 132 | 133 | ```bash 134 | $ python Obj2SchemticConverter.py ./data/sample_data.obj --output_dir ./output/ --h_max 100 --w_max 150 135 | ``` 136 | 137 | ### 5. Import `.schematic` to your Minecraft World!! 138 | 139 | Import generated `.schematic` file to your own Minecraft World using [WorldEdit mod](https://www.curseforge.com/minecraft/mc-mods/worldedit). 140 | -------------------------------------------------------------------------------- /config/block_info.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "COLOR_NAME": "GRASS", 4 | "COLOR": [ 5 | 127, 6 | 178, 7 | 56 8 | ], 9 | "BLOCK_NAME": "草ブロック", 10 | "BLOCK_ID": 2, 11 | "DATA": 0, 12 | "USE": true 13 | }, 14 | { 15 | "COLOR_NAME": "SAND", 16 | "COLOR": [ 17 | 247, 18 | 233, 19 | 163 20 | ], 21 | "BLOCK_NAME": "シラカバの木材", 22 | "BLOCK_ID": 5, 23 | "DATA": 2, 24 | "USE": true 25 | }, 26 | { 27 | "COLOR_NAME": "CLOTH", 28 | "COLOR": [ 29 | 199, 30 | 199, 31 | 199 32 | ], 33 | "BLOCK_NAME": "クモの巣", 34 | "BLOCK_ID": 30, 35 | "DATA": 0, 36 | "USE": true 37 | }, 38 | { 39 | "COLOR_NAME": "TNT", 40 | "COLOR": [ 41 | 255, 42 | 0, 43 | 0 44 | ], 45 | "BLOCK_NAME": "レッドストーンブロック", 46 | "BLOCK_ID": 152, 47 | "DATA": 0, 48 | "USE": true 49 | }, 50 | { 51 | "COLOR_NAME": "ICE", 52 | "COLOR": [ 53 | 160, 54 | 160, 55 | 255 56 | ], 57 | "BLOCK_NAME": "氷塊", 58 | "BLOCK_ID": 174, 59 | "DATA": 0, 60 | "USE": true 61 | }, 62 | { 63 | "COLOR_NAME": "IRON", 64 | "COLOR": [ 65 | 167, 66 | 167, 67 | 167 68 | ], 69 | "BLOCK_NAME": "鉄ブロック", 70 | "BLOCK_ID": 42, 71 | "DATA": 0, 72 | "USE": true 73 | }, 74 | { 75 | "COLOR_NAME": "FOLIAGE", 76 | "COLOR": [ 77 | 0, 78 | 124, 79 | 0 80 | ], 81 | "BLOCK_NAME": "オークの葉", 82 | "BLOCK_ID": 18, 83 | "DATA": 0, 84 | "USE": true 85 | }, 86 | { 87 | "COLOR_NAME": "SNOW", 88 | "COLOR": [ 89 | 255, 90 | 255, 91 | 255 92 | ], 93 | "BLOCK_NAME": "雪", 94 | "BLOCK_ID": 80, 95 | "DATA": 0, 96 | "USE": true 97 | }, 98 | { 99 | "COLOR_NAME": "CLAY", 100 | "COLOR": [ 101 | 164, 102 | 168, 103 | 184 104 | ], 105 | "BLOCK_NAME": "粘土", 106 | "BLOCK_ID": 82, 107 | "DATA": 0, 108 | "USE": true 109 | }, 110 | { 111 | "COLOR_NAME": "DIRT", 112 | "COLOR": [ 113 | 151, 114 | 109, 115 | 77 116 | ], 117 | "BLOCK_NAME": "ジャングルの木材", 118 | "BLOCK_ID": 5, 119 | "DATA": 3, 120 | "USE": true 121 | }, 122 | { 123 | "COLOR_NAME": "STONE", 124 | "COLOR": [ 125 | 112, 126 | 112, 127 | 112 128 | ], 129 | "BLOCK_NAME": "石", 130 | "BLOCK_ID": 1, 131 | "DATA": 0, 132 | "USE": true 133 | }, 134 | { 135 | "COLOR_NAME": "WATER", 136 | "COLOR": [ 137 | 64, 138 | 64, 139 | 255 140 | ], 141 | "BLOCK_NAME": "水", 142 | "BLOCK_ID": 9, 143 | "DATA": 0, 144 | "USE": true 145 | }, 146 | { 147 | "COLOR_NAME": "WOOD", 148 | "COLOR": [ 149 | 143, 150 | 119, 151 | 72 152 | ], 153 | "BLOCK_NAME": "オークの木材", 154 | "BLOCK_ID": 5, 155 | "DATA": 0, 156 | "USE": true 157 | }, 158 | { 159 | "COLOR_NAME": "QUARTZ", 160 | "COLOR": [ 161 | 255, 162 | 252, 163 | 245 164 | ], 165 | "BLOCK_NAME": "シラカバの原木", 166 | "BLOCK_ID": 17, 167 | "DATA": 6, 168 | "USE": true 169 | }, 170 | { 171 | "COLOR_NAME": "ADOBE", 172 | "COLOR": [ 173 | 216, 174 | 127, 175 | 51 176 | ], 177 | "BLOCK_NAME": "橙色の羊毛", 178 | "BLOCK_ID": 35, 179 | "DATA": 1, 180 | "USE": true 181 | }, 182 | { 183 | "COLOR_NAME": "MAGENTA", 184 | "COLOR": [ 185 | 178, 186 | 76, 187 | 216 188 | ], 189 | "BLOCK_NAME": "赤紫色の羊毛", 190 | "BLOCK_ID": 35, 191 | "DATA": 2, 192 | "USE": true 193 | }, 194 | { 195 | "COLOR_NAME": "LIGHT_BLUE", 196 | "COLOR": [ 197 | 102, 198 | 153, 199 | 216 200 | ], 201 | "BLOCK_NAME": "空色の羊毛", 202 | "BLOCK_ID": 35, 203 | "DATA": 3, 204 | "USE": true 205 | }, 206 | { 207 | "COLOR_NAME": "YELLOW", 208 | "COLOR": [ 209 | 229, 210 | 229, 211 | 51 212 | ], 213 | "BLOCK_NAME": "黄色の羊毛", 214 | "BLOCK_ID": 35, 215 | "DATA": 4, 216 | "USE": true 217 | }, 218 | { 219 | "COLOR_NAME": "LIME", 220 | "COLOR": [ 221 | 127, 222 | 204, 223 | 25 224 | ], 225 | "BLOCK_NAME": "黄緑色の羊毛", 226 | "BLOCK_ID": 35, 227 | "DATA": 5, 228 | "USE": true 229 | }, 230 | { 231 | "COLOR_NAME": "PINK", 232 | "COLOR": [ 233 | 242, 234 | 127, 235 | 165 236 | ], 237 | "BLOCK_NAME": "桃色の羊毛", 238 | "BLOCK_ID": 35, 239 | "DATA": 6, 240 | "USE": true 241 | }, 242 | { 243 | "COLOR_NAME": "GRAY", 244 | "COLOR": [ 245 | 76, 246 | 76, 247 | 76 248 | ], 249 | "BLOCK_NAME": "灰色の羊毛", 250 | "BLOCK_ID": 35, 251 | "DATA": 7, 252 | "USE": true 253 | }, 254 | { 255 | "COLOR_NAME": "SILVER", 256 | "COLOR": [ 257 | 153, 258 | 153, 259 | 153 260 | ], 261 | "BLOCK_NAME": "薄灰色の羊毛", 262 | "BLOCK_ID": 35, 263 | "DATA": 8, 264 | "USE": true 265 | }, 266 | { 267 | "COLOR_NAME": "CYAN", 268 | "COLOR": [ 269 | 76, 270 | 127, 271 | 153 272 | ], 273 | "BLOCK_NAME": "青緑色の羊毛", 274 | "BLOCK_ID": 35, 275 | "DATA": 9, 276 | "USE": true 277 | }, 278 | { 279 | "COLOR_NAME": "PURPLE", 280 | "COLOR": [ 281 | 127, 282 | 63, 283 | 178 284 | ], 285 | "BLOCK_NAME": "紫色の羊毛", 286 | "BLOCK_ID": 35, 287 | "DATA": 10, 288 | "USE": true 289 | }, 290 | { 291 | "COLOR_NAME": "BLUE", 292 | "COLOR": [ 293 | 51, 294 | 76, 295 | 178 296 | ], 297 | "BLOCK_NAME": "青色の羊毛", 298 | "BLOCK_ID": 35, 299 | "DATA": 11, 300 | "USE": true 301 | }, 302 | { 303 | "COLOR_NAME": "BROWN", 304 | "COLOR": [ 305 | 102, 306 | 76, 307 | 51 308 | ], 309 | "BLOCK_NAME": "茶色の羊毛", 310 | "BLOCK_ID": 35, 311 | "DATA": 12, 312 | "USE": true 313 | }, 314 | { 315 | "COLOR_NAME": "GREEN", 316 | "COLOR": [ 317 | 102, 318 | 127, 319 | 51 320 | ], 321 | "BLOCK_NAME": "緑色の羊毛", 322 | "BLOCK_ID": 35, 323 | "DATA": 13, 324 | "USE": true 325 | }, 326 | { 327 | "COLOR_NAME": "RED", 328 | "COLOR": [ 329 | 153, 330 | 51, 331 | 51 332 | ], 333 | "BLOCK_NAME": "赤色の羊毛", 334 | "BLOCK_ID": 35, 335 | "DATA": 14, 336 | "USE": true 337 | }, 338 | { 339 | "COLOR_NAME": "BLACK", 340 | "COLOR": [ 341 | 25, 342 | 25, 343 | 25 344 | ], 345 | "BLOCK_NAME": "黒色の羊毛", 346 | "BLOCK_ID": 35, 347 | "DATA": 15, 348 | "USE": true 349 | }, 350 | { 351 | "COLOR_NAME": "GOLD", 352 | "COLOR": [ 353 | 250, 354 | 238, 355 | 77 356 | ], 357 | "BLOCK_NAME": "金ブロック", 358 | "BLOCK_ID": 41, 359 | "DATA": 0, 360 | "USE": true 361 | }, 362 | { 363 | "COLOR_NAME": "DIAMOND", 364 | "COLOR": [ 365 | 92, 366 | 219, 367 | 213 368 | ], 369 | "BLOCK_NAME": "プリズマリンレンガ", 370 | "BLOCK_ID": 168, 371 | "DATA": 1, 372 | "USE": true 373 | }, 374 | { 375 | "COLOR_NAME": "LAPIS", 376 | "COLOR": [ 377 | 74, 378 | 128, 379 | 255 380 | ], 381 | "BLOCK_NAME": "ラピスラズリブロック", 382 | "BLOCK_ID": 22, 383 | "DATA": 0, 384 | "USE": true 385 | }, 386 | { 387 | "COLOR_NAME": "EMERALD", 388 | "COLOR": [ 389 | 0, 390 | 217, 391 | 58 392 | ], 393 | "BLOCK_NAME": "エメラルドブロック", 394 | "BLOCK_ID": 133, 395 | "DATA": 0, 396 | "USE": true 397 | }, 398 | { 399 | "COLOR_NAME": "OBSIDIAN", 400 | "COLOR": [ 401 | 129, 402 | 86, 403 | 49 404 | ], 405 | "BLOCK_NAME": "マツの木材", 406 | "BLOCK_ID": 5, 407 | "DATA": 1, 408 | "USE": true 409 | }, 410 | { 411 | "COLOR_NAME": "NETHERRACK", 412 | "COLOR": [ 413 | 112, 414 | 2, 415 | 0 416 | ], 417 | "BLOCK_NAME": "ネザーラック", 418 | "BLOCK_ID": 87, 419 | "DATA": 0, 420 | "USE": true 421 | }, 422 | { 423 | "COLOR_NAME": "WHITE_STAINED_HARDENED_CLAY", 424 | "COLOR": [ 425 | 209, 426 | 177, 427 | 161 428 | ], 429 | "BLOCK_NAME": "白色のテラコッタ", 430 | "BLOCK_ID": 159, 431 | "DATA": 0, 432 | "USE": true 433 | }, 434 | { 435 | "COLOR_NAME": "ORANGE_STAINED_HARDENED_CLAY", 436 | "COLOR": [ 437 | 159, 438 | 82, 439 | 36 440 | ], 441 | "BLOCK_NAME": "橙色のテラコッタ", 442 | "BLOCK_ID": 159, 443 | "DATA": 1, 444 | "USE": true 445 | }, 446 | { 447 | "COLOR_NAME": "MAGENTA_STAINED_HARDENED_CLAY", 448 | "COLOR": [ 449 | 149, 450 | 87, 451 | 108 452 | ], 453 | "BLOCK_NAME": "赤紫色のテラコッタ", 454 | "BLOCK_ID": 159, 455 | "DATA": 2, 456 | "USE": true 457 | }, 458 | { 459 | "COLOR_NAME": "LIGHT_BLUE_STAINED_HARDENED_CLAY", 460 | "COLOR": [ 461 | 112, 462 | 108, 463 | 138 464 | ], 465 | "BLOCK_NAME": "空色のテラコッタ", 466 | "BLOCK_ID": 159, 467 | "DATA": 3, 468 | "USE": true 469 | }, 470 | { 471 | "COLOR_NAME": "YELLOW_STAINED_HARDENED_CLAY", 472 | "COLOR": [ 473 | 186, 474 | 133, 475 | 36 476 | ], 477 | "BLOCK_NAME": "黄色のテラコッタ", 478 | "BLOCK_ID": 159, 479 | "DATA": 4, 480 | "USE": true 481 | }, 482 | { 483 | "COLOR_NAME": "LIME_STAINED_HARDENED_CLAY", 484 | "COLOR": [ 485 | 103, 486 | 117, 487 | 53 488 | ], 489 | "BLOCK_NAME": "黄緑色のテラコッタ", 490 | "BLOCK_ID": 159, 491 | "DATA": 5, 492 | "USE": true 493 | }, 494 | { 495 | "COLOR_NAME": "PINK_STAINED_HARDENED_CLAY", 496 | "COLOR": [ 497 | 160, 498 | 77, 499 | 78 500 | ], 501 | "BLOCK_NAME": "桃色のテラコッタ", 502 | "BLOCK_ID": 159, 503 | "DATA": 6, 504 | "USE": true 505 | }, 506 | { 507 | "COLOR_NAME": "GRAY_STAINED_HARDENED_CLAY", 508 | "COLOR": [ 509 | 57, 510 | 41, 511 | 35 512 | ], 513 | "BLOCK_NAME": "灰色のテラコッタ", 514 | "BLOCK_ID": 159, 515 | "DATA": 7, 516 | "USE": true 517 | }, 518 | { 519 | "COLOR_NAME": "SILVER_STAINED_HARDENED_CLAY", 520 | "COLOR": [ 521 | 135, 522 | 107, 523 | 98 524 | ], 525 | "BLOCK_NAME": "薄灰色のテラコッタ", 526 | "BLOCK_ID": 159, 527 | "DATA": 8, 528 | "USE": true 529 | }, 530 | { 531 | "COLOR_NAME": "CYAN_STAINED_HARDENED_CLAY", 532 | "COLOR": [ 533 | 87, 534 | 92, 535 | 92 536 | ], 537 | "BLOCK_NAME": "青緑色のテラコッタ", 538 | "BLOCK_ID": 159, 539 | "DATA": 9, 540 | "USE": true 541 | }, 542 | { 543 | "COLOR_NAME": "PURPLE_STAINED_HARDENED_CLAY", 544 | "COLOR": [ 545 | 122, 546 | 73, 547 | 88 548 | ], 549 | "BLOCK_NAME": "紫色のテラコッタ", 550 | "BLOCK_ID": 159, 551 | "DATA": 10, 552 | "USE": true 553 | }, 554 | { 555 | "COLOR_NAME": "BLUE_STAINED_HARDENED_CLAY", 556 | "COLOR": [ 557 | 76, 558 | 62, 559 | 92 560 | ], 561 | "BLOCK_NAME": "青色のテラコッタ", 562 | "BLOCK_ID": 159, 563 | "DATA": 11, 564 | "USE": true 565 | }, 566 | { 567 | "COLOR_NAME": "BROWN_STAINED_HARDENED_CLAY", 568 | "COLOR": [ 569 | 76, 570 | 50, 571 | 35 572 | ], 573 | "BLOCK_NAME": "茶色のテラコッタ", 574 | "BLOCK_ID": 159, 575 | "DATA": 12, 576 | "USE": true 577 | }, 578 | { 579 | "COLOR_NAME": "GREEN_STAINED_HARDENED_CLAY", 580 | "COLOR": [ 581 | 76, 582 | 82, 583 | 42 584 | ], 585 | "BLOCK_NAME": "緑色のテラコッタ", 586 | "BLOCK_ID": 159, 587 | "DATA": 13, 588 | "USE": true 589 | }, 590 | { 591 | "COLOR_NAME": "RED_STAINED_HARDENED_CLAY", 592 | "COLOR": [ 593 | 142, 594 | 60, 595 | 46 596 | ], 597 | "BLOCK_NAME": "赤色のテラコッタ", 598 | "BLOCK_ID": 159, 599 | "DATA": 14, 600 | "USE": true 601 | }, 602 | { 603 | "COLOR_NAME": "BLACK_STAINED_HARDENED_CLAY", 604 | "COLOR": [ 605 | 37, 606 | 22, 607 | 16 608 | ], 609 | "BLOCK_NAME": "黒色のテラコッタ", 610 | "BLOCK_ID": 159, 611 | "DATA": 15, 612 | "USE": true 613 | } 614 | ] -------------------------------------------------------------------------------- /convert_obj2schematic.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pywavefront" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": null, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "# parameters\n", 19 | "HEIGHT_MAX = 150\n", 20 | "WIDTH_MAX = 100\n", 21 | "OUTPUT_FILE = 'result.schematic'" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "# データ読み込み" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [ 37 | "data = 'data/sample_data.obj'" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": null, 43 | "metadata": {}, 44 | "outputs": [], 45 | "source": [ 46 | "scene = pywavefront.Wavefront(data)" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": null, 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [ 55 | "len(scene.vertices)" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": null, 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [ 64 | "import pandas as pd" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": null, 70 | "metadata": {}, 71 | "outputs": [], 72 | "source": [ 73 | "coordinates = ['x','y','z']\n", 74 | "colors = ['r','g','b']\n", 75 | "df = pd.DataFrame(scene.vertices,columns=coordinates + colors)\n", 76 | "df.describe()" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "# `(x,y,z)`座標を0起点に変換" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": null, 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [ 92 | "df[coordinates] = df[coordinates] - df[coordinates].apply(min)\n", 93 | "'''\n", 94 | "for coor in coordinates:\n", 95 | " df[coor] = df[coor] - min(df[coor])\n", 96 | "'''\n", 97 | "df[coordinates].describe()" 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "# `(x,y,z)`座標の拡大倍率を決定する" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": null, 110 | "metadata": {}, 111 | "outputs": [], 112 | "source": [ 113 | "%%time\n", 114 | "max_series = df[coordinates].apply(max)\n", 115 | "max_val = max_series.max()\n", 116 | "max_idx = max_series.idxmax()\n", 117 | "'''\n", 118 | "for coor in coordinates:\n", 119 | " if max_val < max(df[coor]):\n", 120 | " max_val = max(df[coor])\n", 121 | " max_idx = coor\n", 122 | "'''\n", 123 | "print('col:',max_idx)\n", 124 | "print('max_val:',max_val)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": null, 130 | "metadata": {}, 131 | "outputs": [], 132 | "source": [ 133 | "if max_idx in ['x','z']:\n", 134 | " zoom_ratio = WIDTH_MAX / max_val\n", 135 | "else:\n", 136 | " zoom_ratio = HEIGHT_MAX / max_val\n", 137 | "print('zoom_ratio:',zoom_ratio)" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": null, 143 | "metadata": {}, 144 | "outputs": [], 145 | "source": [ 146 | "df[coordinates] = df[coordinates] * zoom_ratio\n", 147 | "#for coor in coordinates:\n", 148 | "# df[coor] = df[coor] * zoom_ratio\n", 149 | "df[coordinates].describe()" 150 | ] 151 | }, 152 | { 153 | "cell_type": "markdown", 154 | "metadata": {}, 155 | "source": [ 156 | "# 外接矩形領域の終点" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": null, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [ 165 | "bounds_e = df[coordinates].apply(max)\n", 166 | "print(bounds_e)" 167 | ] 168 | }, 169 | { 170 | "cell_type": "markdown", 171 | "metadata": {}, 172 | "source": [ 173 | "# 色情報を復元\n", 174 | "値が`1.0`の場合に最大値(`255`)となるように変換 \n", 175 | "※これであってるのかは不明" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": null, 181 | "metadata": {}, 182 | "outputs": [], 183 | "source": [ 184 | "COLOR_MAX = 255\n", 185 | "norm_colors = ['norm_r','norm_g','norm_b']\n", 186 | "df[norm_colors] = df[colors] * COLOR_MAX\n", 187 | "#for color in colors:\n", 188 | "# df[color] = df[color] * COLOR_MAX\n", 189 | "df[colors + norm_colors].describe()" 190 | ] 191 | }, 192 | { 193 | "cell_type": "markdown", 194 | "metadata": {}, 195 | "source": [ 196 | "# 座標値を整数に変換(切り捨て)" 197 | ] 198 | }, 199 | { 200 | "cell_type": "code", 201 | "execution_count": null, 202 | "metadata": {}, 203 | "outputs": [], 204 | "source": [ 205 | "import numpy as np\n", 206 | "df[coordinates] = df[coordinates].apply(np.floor).astype(int)\n", 207 | "df[coordinates].describe()" 208 | ] 209 | }, 210 | { 211 | "cell_type": "markdown", 212 | "metadata": {}, 213 | "source": [ 214 | "# ボクセル位置を表す識別子用の列を追加" 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "execution_count": null, 220 | "metadata": {}, 221 | "outputs": [], 222 | "source": [ 223 | "def gen_coordinates_id(row):\n", 224 | " return ','.join([str(v) for v in row.values])" 225 | ] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "execution_count": null, 230 | "metadata": {}, 231 | "outputs": [], 232 | "source": [ 233 | "%%time\n", 234 | "coor_id = 'coordinate_id'\n", 235 | "df[coor_id] = df[coordinates].apply(gen_coordinates_id,axis=1)\n", 236 | "df[coor_id]" 237 | ] 238 | }, 239 | { 240 | "cell_type": "markdown", 241 | "metadata": {}, 242 | "source": [ 243 | "# 各ボクセルの色の代表値を決める" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": null, 249 | "metadata": {}, 250 | "outputs": [], 251 | "source": [ 252 | "%%time\n", 253 | "from tqdm import tqdm\n", 254 | "typical_colors = {}\n", 255 | "for coor_id_val in tqdm(set(df[coor_id])):\n", 256 | " target = df[df[coor_id] == coor_id_val][colors + norm_colors]\n", 257 | " typical_colors[coor_id_val] = target.mean()\n", 258 | "#typical_colors" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": null, 264 | "metadata": {}, 265 | "outputs": [], 266 | "source": [ 267 | "voxel = np.zeros(list((bounds_e + 1).apply(np.ceil).values.astype(int)) + [3])\n", 268 | "voxel.shape" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": null, 274 | "metadata": { 275 | "tags": [ 276 | "outputPrepend", 277 | "outputPrepend", 278 | "outputPrepend", 279 | "outputPrepend", 280 | "outputPrepend", 281 | "outputPrepend", 282 | "outputPrepend", 283 | "outputPrepend", 284 | "outputPrepend", 285 | "outputPrepend" 286 | ] 287 | }, 288 | "outputs": [], 289 | "source": [ 290 | "for coor,color in tqdm(typical_colors.items()):\n", 291 | " x,y,z = [int(v) for v in coor.split(',')]\n", 292 | " voxel[x,y,z] = color[norm_colors].values" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": {}, 298 | "source": [ 299 | "# 結果表示" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": null, 305 | "metadata": {}, 306 | "outputs": [], 307 | "source": [ 308 | "#%matplotlib inline\n", 309 | "#%matplotlib notebook\n", 310 | "import matplotlib.pyplot as plt\n", 311 | "import numpy as np\n", 312 | "from matplotlib.image import imread\n", 313 | "from mpl_toolkits.mplot3d import Axes3D" 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": null, 319 | "metadata": {}, 320 | "outputs": [], 321 | "source": [ 322 | "fig = plt.figure(figsize=(8,20))\n", 323 | "ax = fig.add_subplot(111, projection='3d')\n", 324 | "for coor,color in tqdm(typical_colors.items()):\n", 325 | " x,y,z = [int(v) for v in coor.split(',')]\n", 326 | " ax.plot(x,z,y,marker='.',color=color[colors])\n", 327 | "#ax.scatter3D(np.ravel(x), np.ravel(z), np.ravel(y),s=10,marker='.')\n", 328 | "ax.set_title(\"result\")\n", 329 | "plt.show()" 330 | ] 331 | }, 332 | { 333 | "cell_type": "code", 334 | "execution_count": null, 335 | "metadata": {}, 336 | "outputs": [], 337 | "source": [ 338 | "import plotly.plotly as py\n", 339 | "import plotly.graph_objs as go\n", 340 | "import os\n", 341 | "from plotly.offline import iplot, init_notebook_mode" 342 | ] 343 | }, 344 | { 345 | "cell_type": "code", 346 | "execution_count": null, 347 | "metadata": {}, 348 | "outputs": [], 349 | "source": [ 350 | "#import plotly.graph_objects as go\n", 351 | "import numpy as np\n", 352 | "\n", 353 | "# Helix equation\n", 354 | "t = np.linspace(0, 10, 50)\n", 355 | "x, y, z = np.cos(t), np.sin(t), t\n", 356 | "\n", 357 | "fig = go.Figure(data=[go.Scatter3d(x=df['x'], y=df['y'], z=df['z'],\n", 358 | " mode='markers')])\n", 359 | "fig.show()" 360 | ] 361 | }, 362 | { 363 | "cell_type": "markdown", 364 | "metadata": {}, 365 | "source": [ 366 | "# Schematicファイルに変換" 367 | ] 368 | }, 369 | { 370 | "cell_type": "code", 371 | "execution_count": null, 372 | "metadata": {}, 373 | "outputs": [], 374 | "source": [ 375 | "blocks = []\n", 376 | "data = []\n", 377 | "width,height,length = voxel.shape[:3]\n", 378 | "print(width,height,length)" 379 | ] 380 | }, 381 | { 382 | "cell_type": "code", 383 | "execution_count": null, 384 | "metadata": {}, 385 | "outputs": [], 386 | "source": [ 387 | "def _packing(schematic_obj):\n", 388 | " schematic_obj.root['Blocks'] = tag.ByteArray(blocks)\n", 389 | " schematic_obj.root['Data'] = tag.ByteArray(data)\n", 390 | " schematic_obj.root['Width'] = tag.Short(width)\n", 391 | " schematic_obj.root['Length'] = tag.Short(length)\n", 392 | " schematic_obj.root['Height'] = tag.Short(height)\n", 393 | "\n", 394 | "def _save_schematic(out_file,schematic_obj):\n", 395 | " schematic_obj.save(out_file)\n", 396 | "\n", 397 | "def output(out_path,schematic_obj):\n", 398 | " _packing(schematic_obj)\n", 399 | " _save_schematic(out_path,schematic_obj)" 400 | ] 401 | }, 402 | { 403 | "cell_type": "code", 404 | "execution_count": null, 405 | "metadata": {}, 406 | "outputs": [], 407 | "source": [ 408 | "def calc_nearest_block(obj_color,config):\n", 409 | " best = float('inf')\n", 410 | " for c in config:\n", 411 | " p_color = c['COLOR']\n", 412 | " diff = obj_color - p_color\n", 413 | " diff_dist = sum(diff ** 2)\n", 414 | " if best > diff_dist:\n", 415 | " best = diff_dist\n", 416 | " color_data = c\n", 417 | " if best == 0:\n", 418 | " break\n", 419 | " return color_data\n" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": null, 425 | "metadata": {}, 426 | "outputs": [], 427 | "source": [ 428 | "# 設定ファイルを読み込み\n", 429 | "import json\n", 430 | "with open('config/block_info.json', 'r', encoding='utf-8') as f:\n", 431 | " config = json.load(f)\n", 432 | "# config" 433 | ] 434 | }, 435 | { 436 | "cell_type": "markdown", 437 | "metadata": {}, 438 | "source": [ 439 | "## [Schematic File Format](https://minecraft.gamepedia.com/Schematic_file_format)\n", 440 | "\n", 441 | "> Indices for the Blocks and Data arrays are ordered YZX - that is, the X coordinate varies the fastest. \n", 442 | "\n", 443 | "> Blocks: Block IDs defining the terrain. 8 bits per block. Sorted by height (bottom to top) then length then width—the index of the block at X,Y,Z is (Y×length + Z)×width + X.\n", 444 | "\n", 445 | "`X`は`width`、`Y`は`height`、`Z`は`length`に対応する。 \n", 446 | "`Blocks`と`Data`は`X`方向への走査後に、`Z`方向にうつり、その後`Y`方向に移動する。" 447 | ] 448 | }, 449 | { 450 | "cell_type": "code", 451 | "execution_count": null, 452 | "metadata": { 453 | "tags": [ 454 | "outputPrepend", 455 | "outputPrepend", 456 | "outputPrepend", 457 | "outputPrepend", 458 | "outputPrepend", 459 | "outputPrepend", 460 | "outputPrepend", 461 | "outputPrepend", 462 | "outputPrepend", 463 | "outputPrepend", 464 | "outputPrepend", 465 | "outputPrepend", 466 | "outputPrepend", 467 | "outputPrepend", 468 | "outputPrepend", 469 | "outputPrepend", 470 | "outputPrepend", 471 | "outputPrepend", 472 | "outputPrepend", 473 | "outputPrepend", 474 | "outputPrepend", 475 | "outputPrepend", 476 | "outputPrepend", 477 | "outputPrepend", 478 | "outputPrepend", 479 | "outputPrepend", 480 | "outputPrepend", 481 | "outputPrepend", 482 | "outputPrepend", 483 | "outputPrepend", 484 | "outputPrepend", 485 | "outputPrepend", 486 | "outputPrepend", 487 | "outputPrepend", 488 | "outputPrepend", 489 | "outputPrepend", 490 | "outputPrepend", 491 | "outputPrepend", 492 | "outputPrepend", 493 | "outputPrepend", 494 | "outputPrepend", 495 | "outputPrepend", 496 | "outputPrepend", 497 | "outputPrepend", 498 | "outputPrepend", 499 | "outputPrepend", 500 | "outputPrepend", 501 | "outputPrepend", 502 | "outputPrepend", 503 | "outputPrepend", 504 | "outputPrepend", 505 | "outputPrepend", 506 | "outputPrepend", 507 | "outputPrepend", 508 | "outputPrepend", 509 | "outputPrepend", 510 | "outputPrepend", 511 | "outputPrepend", 512 | "outputPrepend", 513 | "outputPrepend", 514 | "outputPrepend", 515 | "outputPrepend", 516 | "outputPrepend", 517 | "outputPrepend", 518 | "outputPrepend", 519 | "outputPrepend", 520 | "outputPrepend", 521 | "outputPrepend", 522 | "outputPrepend", 523 | "outputPrepend", 524 | "outputPrepend", 525 | "outputPrepend", 526 | "outputPrepend", 527 | "outputPrepend", 528 | "outputPrepend", 529 | "outputPrepend", 530 | "outputPrepend", 531 | "outputPrepend", 532 | "outputPrepend", 533 | "outputPrepend", 534 | "outputPrepend", 535 | "outputPrepend", 536 | "outputPrepend", 537 | "outputPrepend", 538 | "outputPrepend", 539 | "outputPrepend", 540 | "outputPrepend", 541 | "outputPrepend", 542 | "outputPrepend", 543 | "outputPrepend", 544 | "outputPrepend", 545 | "outputPrepend", 546 | "outputPrepend", 547 | "outputPrepend", 548 | "outputPrepend", 549 | "outputPrepend", 550 | "outputPrepend", 551 | "outputPrepend", 552 | "outputPrepend", 553 | "outputPrepend", 554 | "outputPrepend", 555 | "outputPrepend", 556 | "outputPrepend", 557 | "outputPrepend", 558 | "outputPrepend", 559 | "outputPrepend", 560 | "outputPrepend", 561 | "outputPrepend", 562 | "outputPrepend", 563 | "outputPrepend", 564 | "outputPrepend", 565 | "outputPrepend", 566 | "outputPrepend", 567 | "outputPrepend", 568 | "outputPrepend", 569 | "outputPrepend", 570 | "outputPrepend", 571 | "outputPrepend", 572 | "outputPrepend", 573 | "outputPrepend", 574 | "outputPrepend", 575 | "outputPrepend", 576 | "outputPrepend", 577 | "outputPrepend", 578 | "outputPrepend", 579 | "outputPrepend", 580 | "outputPrepend", 581 | "outputPrepend", 582 | "outputPrepend", 583 | "outputPrepend", 584 | "outputPrepend", 585 | "outputPrepend", 586 | "outputPrepend", 587 | "outputPrepend", 588 | "outputPrepend", 589 | "outputPrepend", 590 | "outputPrepend", 591 | "outputPrepend", 592 | "outputPrepend", 593 | "outputPrepend", 594 | "outputPrepend", 595 | "outputPrepend", 596 | "outputPrepend", 597 | "outputPrepend", 598 | "outputPrepend", 599 | "outputPrepend", 600 | "outputPrepend", 601 | "outputPrepend", 602 | "outputPrepend", 603 | "outputPrepend", 604 | "outputPrepend", 605 | "outputPrepend", 606 | "outputPrepend", 607 | "outputPrepend", 608 | "outputPrepend", 609 | "outputPrepend", 610 | "outputPrepend", 611 | "outputPrepend", 612 | "outputPrepend", 613 | "outputPrepend", 614 | "outputPrepend", 615 | "outputPrepend", 616 | "outputPrepend", 617 | "outputPrepend", 618 | "outputPrepend", 619 | "outputPrepend", 620 | "outputPrepend", 621 | "outputPrepend", 622 | "outputPrepend", 623 | "outputPrepend", 624 | "outputPrepend", 625 | "outputPrepend", 626 | "outputPrepend", 627 | "outputPrepend", 628 | "outputPrepend", 629 | "outputPrepend", 630 | "outputPrepend", 631 | "outputPrepend", 632 | "outputPrepend", 633 | "outputPrepend", 634 | "outputPrepend", 635 | "outputPrepend", 636 | "outputPrepend", 637 | "outputPrepend", 638 | "outputPrepend", 639 | "outputPrepend", 640 | "outputPrepend", 641 | "outputPrepend", 642 | "outputPrepend", 643 | "outputPrepend", 644 | "outputPrepend", 645 | "outputPrepend", 646 | "outputPrepend", 647 | "outputPrepend", 648 | "outputPrepend", 649 | "outputPrepend", 650 | "outputPrepend", 651 | "outputPrepend", 652 | "outputPrepend", 653 | "outputPrepend", 654 | "outputPrepend", 655 | "outputPrepend", 656 | "outputPrepend", 657 | "outputPrepend", 658 | "outputPrepend", 659 | "outputPrepend", 660 | "outputPrepend", 661 | "outputPrepend", 662 | "outputPrepend", 663 | "outputPrepend", 664 | "outputPrepend", 665 | "outputPrepend", 666 | "outputPrepend", 667 | "outputPrepend", 668 | "outputPrepend", 669 | "outputPrepend", 670 | "outputPrepend", 671 | "outputPrepend", 672 | "outputPrepend", 673 | "outputPrepend", 674 | "outputPrepend", 675 | "outputPrepend", 676 | "outputPrepend", 677 | "outputPrepend", 678 | "outputPrepend", 679 | "outputPrepend", 680 | "outputPrepend", 681 | "outputPrepend", 682 | "outputPrepend", 683 | "outputPrepend", 684 | "outputPrepend", 685 | "outputPrepend", 686 | "outputPrepend", 687 | "outputPrepend", 688 | "outputPrepend", 689 | "outputPrepend", 690 | "outputPrepend", 691 | "outputPrepend", 692 | "outputPrepend", 693 | "outputPrepend", 694 | "outputPrepend", 695 | "outputPrepend", 696 | "outputPrepend", 697 | "outputPrepend", 698 | "outputPrepend", 699 | "outputPrepend", 700 | "outputPrepend", 701 | "outputPrepend", 702 | "outputPrepend", 703 | "outputPrepend", 704 | "outputPrepend", 705 | "outputPrepend", 706 | "outputPrepend", 707 | "outputPrepend", 708 | "outputPrepend", 709 | "outputPrepend", 710 | "outputPrepend", 711 | "outputPrepend", 712 | "outputPrepend", 713 | "outputPrepend", 714 | "outputPrepend", 715 | "outputPrepend", 716 | "outputPrepend", 717 | "outputPrepend", 718 | "outputPrepend", 719 | "outputPrepend", 720 | "outputPrepend", 721 | "outputPrepend", 722 | "outputPrepend", 723 | "outputPrepend", 724 | "outputPrepend", 725 | "outputPrepend", 726 | "outputPrepend", 727 | "outputPrepend", 728 | "outputPrepend", 729 | "outputPrepend", 730 | "outputPrepend", 731 | "outputPrepend", 732 | "outputPrepend", 733 | "outputPrepend", 734 | "outputPrepend", 735 | "outputPrepend", 736 | "outputPrepend", 737 | "outputPrepend", 738 | "outputPrepend", 739 | "outputPrepend", 740 | "outputPrepend", 741 | "outputPrepend", 742 | "outputPrepend", 743 | "outputPrepend", 744 | "outputPrepend", 745 | "outputPrepend", 746 | "outputPrepend", 747 | "outputPrepend", 748 | "outputPrepend", 749 | "outputPrepend", 750 | "outputPrepend", 751 | "outputPrepend", 752 | "outputPrepend", 753 | "outputPrepend", 754 | "outputPrepend", 755 | "outputPrepend", 756 | "outputPrepend", 757 | "outputPrepend", 758 | "outputPrepend", 759 | "outputPrepend", 760 | "outputPrepend", 761 | "outputPrepend", 762 | "outputPrepend", 763 | "outputPrepend", 764 | "outputPrepend", 765 | "outputPrepend", 766 | "outputPrepend", 767 | "outputPrepend", 768 | "outputPrepend", 769 | "outputPrepend", 770 | "outputPrepend", 771 | "outputPrepend", 772 | "outputPrepend", 773 | "outputPrepend", 774 | "outputPrepend", 775 | "outputPrepend", 776 | "outputPrepend", 777 | "outputPrepend", 778 | "outputPrepend", 779 | "outputPrepend", 780 | "outputPrepend", 781 | "outputPrepend", 782 | "outputPrepend", 783 | "outputPrepend", 784 | "outputPrepend", 785 | "outputPrepend", 786 | "outputPrepend", 787 | "outputPrepend", 788 | "outputPrepend", 789 | "outputPrepend", 790 | "outputPrepend", 791 | "outputPrepend", 792 | "outputPrepend", 793 | "outputPrepend", 794 | "outputPrepend", 795 | "outputPrepend", 796 | "outputPrepend", 797 | "outputPrepend", 798 | "outputPrepend", 799 | "outputPrepend", 800 | "outputPrepend", 801 | "outputPrepend", 802 | "outputPrepend", 803 | "outputPrepend", 804 | "outputPrepend", 805 | "outputPrepend", 806 | "outputPrepend", 807 | "outputPrepend", 808 | "outputPrepend", 809 | "outputPrepend", 810 | "outputPrepend", 811 | "outputPrepend", 812 | "outputPrepend", 813 | "outputPrepend", 814 | "outputPrepend", 815 | "outputPrepend", 816 | "outputPrepend", 817 | "outputPrepend", 818 | "outputPrepend", 819 | "outputPrepend", 820 | "outputPrepend", 821 | "outputPrepend", 822 | "outputPrepend", 823 | "outputPrepend", 824 | "outputPrepend", 825 | "outputPrepend", 826 | "outputPrepend", 827 | "outputPrepend", 828 | "outputPrepend", 829 | "outputPrepend", 830 | "outputPrepend", 831 | "outputPrepend", 832 | "outputPrepend", 833 | "outputPrepend", 834 | "outputPrepend", 835 | "outputPrepend", 836 | "outputPrepend", 837 | "outputPrepend", 838 | "outputPrepend", 839 | "outputPrepend", 840 | "outputPrepend", 841 | "outputPrepend", 842 | "outputPrepend", 843 | "outputPrepend", 844 | "outputPrepend", 845 | "outputPrepend", 846 | "outputPrepend", 847 | "outputPrepend", 848 | "outputPrepend", 849 | "outputPrepend", 850 | "outputPrepend", 851 | "outputPrepend", 852 | "outputPrepend", 853 | "outputPrepend", 854 | "outputPrepend", 855 | "outputPrepend", 856 | "outputPrepend", 857 | "outputPrepend", 858 | "outputPrepend", 859 | "outputPrepend", 860 | "outputPrepend", 861 | "outputPrepend", 862 | "outputPrepend", 863 | "outputPrepend", 864 | "outputPrepend", 865 | "outputPrepend", 866 | "outputPrepend", 867 | "outputPrepend", 868 | "outputPrepend", 869 | "outputPrepend", 870 | "outputPrepend", 871 | "outputPrepend", 872 | "outputPrepend", 873 | "outputPrepend", 874 | "outputPrepend", 875 | "outputPrepend", 876 | "outputPrepend", 877 | "outputPrepend", 878 | "outputPrepend", 879 | "outputPrepend", 880 | "outputPrepend", 881 | "outputPrepend", 882 | "outputPrepend", 883 | "outputPrepend", 884 | "outputPrepend", 885 | "outputPrepend", 886 | "outputPrepend", 887 | "outputPrepend", 888 | "outputPrepend", 889 | "outputPrepend", 890 | "outputPrepend", 891 | "outputPrepend", 892 | "outputPrepend", 893 | "outputPrepend", 894 | "outputPrepend", 895 | "outputPrepend", 896 | "outputPrepend", 897 | "outputPrepend", 898 | "outputPrepend", 899 | "outputPrepend", 900 | "outputPrepend", 901 | "outputPrepend", 902 | "outputPrepend", 903 | "outputPrepend", 904 | "outputPrepend", 905 | "outputPrepend", 906 | "outputPrepend", 907 | "outputPrepend", 908 | "outputPrepend", 909 | "outputPrepend", 910 | "outputPrepend", 911 | "outputPrepend", 912 | "outputPrepend", 913 | "outputPrepend", 914 | "outputPrepend", 915 | "outputPrepend", 916 | "outputPrepend", 917 | "outputPrepend", 918 | "outputPrepend", 919 | "outputPrepend", 920 | "outputPrepend", 921 | "outputPrepend", 922 | "outputPrepend", 923 | "outputPrepend", 924 | "outputPrepend", 925 | "outputPrepend", 926 | "outputPrepend", 927 | "outputPrepend", 928 | "outputPrepend", 929 | "outputPrepend", 930 | "outputPrepend", 931 | "outputPrepend", 932 | "outputPrepend", 933 | "outputPrepend", 934 | "outputPrepend", 935 | "outputPrepend", 936 | "outputPrepend", 937 | "outputPrepend", 938 | "outputPrepend", 939 | "outputPrepend", 940 | "outputPrepend", 941 | "outputPrepend", 942 | "outputPrepend", 943 | "outputPrepend", 944 | "outputPrepend", 945 | "outputPrepend", 946 | "outputPrepend", 947 | "outputPrepend", 948 | "outputPrepend", 949 | "outputPrepend", 950 | "outputPrepend", 951 | "outputPrepend", 952 | "outputPrepend", 953 | "outputPrepend", 954 | "outputPrepend", 955 | "outputPrepend", 956 | "outputPrepend", 957 | "outputPrepend", 958 | "outputPrepend", 959 | "outputPrepend", 960 | "outputPrepend", 961 | "outputPrepend", 962 | "outputPrepend", 963 | "outputPrepend", 964 | "outputPrepend", 965 | "outputPrepend", 966 | "outputPrepend", 967 | "outputPrepend", 968 | "outputPrepend", 969 | "outputPrepend", 970 | "outputPrepend", 971 | "outputPrepend", 972 | "outputPrepend", 973 | "outputPrepend", 974 | "outputPrepend", 975 | "outputPrepend", 976 | "outputPrepend", 977 | "outputPrepend", 978 | "outputPrepend", 979 | "outputPrepend", 980 | "outputPrepend", 981 | "outputPrepend", 982 | "outputPrepend", 983 | "outputPrepend", 984 | "outputPrepend", 985 | "outputPrepend", 986 | "outputPrepend", 987 | "outputPrepend", 988 | "outputPrepend", 989 | "outputPrepend", 990 | "outputPrepend", 991 | "outputPrepend", 992 | "outputPrepend", 993 | "outputPrepend", 994 | "outputPrepend", 995 | "outputPrepend", 996 | "outputPrepend", 997 | "outputPrepend", 998 | "outputPrepend", 999 | "outputPrepend", 1000 | "outputPrepend", 1001 | "outputPrepend", 1002 | "outputPrepend", 1003 | "outputPrepend", 1004 | "outputPrepend", 1005 | "outputPrepend", 1006 | "outputPrepend", 1007 | "outputPrepend", 1008 | "outputPrepend", 1009 | "outputPrepend", 1010 | "outputPrepend", 1011 | "outputPrepend", 1012 | "outputPrepend", 1013 | "outputPrepend", 1014 | "outputPrepend", 1015 | "outputPrepend", 1016 | "outputPrepend", 1017 | "outputPrepend", 1018 | "outputPrepend", 1019 | "outputPrepend", 1020 | "outputPrepend", 1021 | "outputPrepend", 1022 | "outputPrepend", 1023 | "outputPrepend", 1024 | "outputPrepend", 1025 | "outputPrepend", 1026 | "outputPrepend", 1027 | "outputPrepend", 1028 | "outputPrepend", 1029 | "outputPrepend", 1030 | "outputPrepend", 1031 | "outputPrepend", 1032 | "outputPrepend", 1033 | "outputPrepend", 1034 | "outputPrepend", 1035 | "outputPrepend", 1036 | "outputPrepend", 1037 | "outputPrepend", 1038 | "outputPrepend", 1039 | "outputPrepend", 1040 | "outputPrepend", 1041 | "outputPrepend", 1042 | "outputPrepend", 1043 | "outputPrepend", 1044 | "outputPrepend", 1045 | "outputPrepend", 1046 | "outputPrepend", 1047 | "outputPrepend", 1048 | "outputPrepend", 1049 | "outputPrepend", 1050 | "outputPrepend", 1051 | "outputPrepend", 1052 | "outputPrepend", 1053 | "outputPrepend", 1054 | "outputPrepend", 1055 | "outputPrepend", 1056 | "outputPrepend", 1057 | "outputPrepend", 1058 | "outputPrepend", 1059 | "outputPrepend", 1060 | "outputPrepend", 1061 | "outputPrepend", 1062 | "outputPrepend", 1063 | "outputPrepend", 1064 | "outputPrepend", 1065 | "outputPrepend", 1066 | "outputPrepend", 1067 | "outputPrepend", 1068 | "outputPrepend", 1069 | "outputPrepend", 1070 | "outputPrepend", 1071 | "outputPrepend", 1072 | "outputPrepend", 1073 | "outputPrepend", 1074 | "outputPrepend", 1075 | "outputPrepend", 1076 | "outputPrepend", 1077 | "outputPrepend", 1078 | "outputPrepend", 1079 | "outputPrepend", 1080 | "outputPrepend", 1081 | "outputPrepend", 1082 | "outputPrepend", 1083 | "outputPrepend", 1084 | "outputPrepend", 1085 | "outputPrepend", 1086 | "outputPrepend", 1087 | "outputPrepend", 1088 | "outputPrepend", 1089 | "outputPrepend", 1090 | "outputPrepend", 1091 | "outputPrepend", 1092 | "outputPrepend", 1093 | "outputPrepend", 1094 | "outputPrepend", 1095 | "outputPrepend", 1096 | "outputPrepend", 1097 | "outputPrepend", 1098 | "outputPrepend", 1099 | "outputPrepend", 1100 | "outputPrepend", 1101 | "outputPrepend", 1102 | "outputPrepend", 1103 | "outputPrepend", 1104 | "outputPrepend", 1105 | "outputPrepend", 1106 | "outputPrepend", 1107 | "outputPrepend", 1108 | "outputPrepend", 1109 | "outputPrepend", 1110 | "outputPrepend", 1111 | "outputPrepend", 1112 | "outputPrepend", 1113 | "outputPrepend", 1114 | "outputPrepend", 1115 | "outputPrepend", 1116 | "outputPrepend", 1117 | "outputPrepend", 1118 | "outputPrepend", 1119 | "outputPrepend", 1120 | "outputPrepend", 1121 | "outputPrepend", 1122 | "outputPrepend", 1123 | "outputPrepend", 1124 | "outputPrepend", 1125 | "outputPrepend", 1126 | "outputPrepend", 1127 | "outputPrepend", 1128 | "outputPrepend", 1129 | "outputPrepend", 1130 | "outputPrepend", 1131 | "outputPrepend", 1132 | "outputPrepend", 1133 | "outputPrepend", 1134 | "outputPrepend", 1135 | "outputPrepend", 1136 | "outputPrepend", 1137 | "outputPrepend", 1138 | "outputPrepend", 1139 | "outputPrepend", 1140 | "outputPrepend", 1141 | "outputPrepend", 1142 | "outputPrepend", 1143 | "outputPrepend", 1144 | "outputPrepend", 1145 | "outputPrepend", 1146 | "outputPrepend", 1147 | "outputPrepend", 1148 | "outputPrepend", 1149 | "outputPrepend", 1150 | "outputPrepend", 1151 | "outputPrepend", 1152 | "outputPrepend", 1153 | "outputPrepend", 1154 | "outputPrepend", 1155 | "outputPrepend", 1156 | "outputPrepend", 1157 | "outputPrepend", 1158 | "outputPrepend", 1159 | "outputPrepend", 1160 | "outputPrepend", 1161 | "outputPrepend", 1162 | "outputPrepend", 1163 | "outputPrepend", 1164 | "outputPrepend", 1165 | "outputPrepend", 1166 | "outputPrepend", 1167 | "outputPrepend", 1168 | "outputPrepend", 1169 | "outputPrepend", 1170 | "outputPrepend", 1171 | "outputPrepend", 1172 | "outputPrepend", 1173 | "outputPrepend", 1174 | "outputPrepend", 1175 | "outputPrepend", 1176 | "outputPrepend", 1177 | "outputPrepend", 1178 | "outputPrepend", 1179 | "outputPrepend", 1180 | "outputPrepend", 1181 | "outputPrepend", 1182 | "outputPrepend", 1183 | "outputPrepend", 1184 | "outputPrepend", 1185 | "outputPrepend", 1186 | "outputPrepend", 1187 | "outputPrepend", 1188 | "outputPrepend", 1189 | "outputPrepend", 1190 | "outputPrepend", 1191 | "outputPrepend", 1192 | "outputPrepend", 1193 | "outputPrepend", 1194 | "outputPrepend", 1195 | "outputPrepend", 1196 | "outputPrepend", 1197 | "outputPrepend", 1198 | "outputPrepend", 1199 | "outputPrepend", 1200 | "outputPrepend", 1201 | "outputPrepend", 1202 | "outputPrepend", 1203 | "outputPrepend", 1204 | "outputPrepend", 1205 | "outputPrepend", 1206 | "outputPrepend", 1207 | "outputPrepend", 1208 | "outputPrepend", 1209 | "outputPrepend", 1210 | "outputPrepend", 1211 | "outputPrepend", 1212 | "outputPrepend", 1213 | "outputPrepend", 1214 | "outputPrepend", 1215 | "outputPrepend", 1216 | "outputPrepend", 1217 | "outputPrepend", 1218 | "outputPrepend", 1219 | "outputPrepend", 1220 | "outputPrepend", 1221 | "outputPrepend", 1222 | "outputPrepend", 1223 | "outputPrepend", 1224 | "outputPrepend", 1225 | "outputPrepend", 1226 | "outputPrepend", 1227 | "outputPrepend", 1228 | "outputPrepend", 1229 | "outputPrepend", 1230 | "outputPrepend", 1231 | "outputPrepend", 1232 | "outputPrepend", 1233 | "outputPrepend", 1234 | "outputPrepend", 1235 | "outputPrepend", 1236 | "outputPrepend", 1237 | "outputPrepend", 1238 | "outputPrepend", 1239 | "outputPrepend", 1240 | "outputPrepend", 1241 | "outputPrepend", 1242 | "outputPrepend", 1243 | "outputPrepend", 1244 | "outputPrepend", 1245 | "outputPrepend", 1246 | "outputPrepend", 1247 | "outputPrepend", 1248 | "outputPrepend", 1249 | "outputPrepend", 1250 | "outputPrepend", 1251 | "outputPrepend", 1252 | "outputPrepend", 1253 | "outputPrepend", 1254 | "outputPrepend", 1255 | "outputPrepend", 1256 | "outputPrepend", 1257 | "outputPrepend", 1258 | "outputPrepend", 1259 | "outputPrepend", 1260 | "outputPrepend", 1261 | "outputPrepend", 1262 | "outputPrepend", 1263 | "outputPrepend", 1264 | "outputPrepend", 1265 | "outputPrepend", 1266 | "outputPrepend", 1267 | "outputPrepend", 1268 | "outputPrepend", 1269 | "outputPrepend", 1270 | "outputPrepend", 1271 | "outputPrepend", 1272 | "outputPrepend", 1273 | "outputPrepend", 1274 | "outputPrepend", 1275 | "outputPrepend", 1276 | "outputPrepend", 1277 | "outputPrepend", 1278 | "outputPrepend", 1279 | "outputPrepend", 1280 | "outputPrepend", 1281 | "outputPrepend", 1282 | "outputPrepend", 1283 | "outputPrepend", 1284 | "outputPrepend", 1285 | "outputPrepend", 1286 | "outputPrepend", 1287 | "outputPrepend", 1288 | "outputPrepend", 1289 | "outputPrepend", 1290 | "outputPrepend", 1291 | "outputPrepend", 1292 | "outputPrepend", 1293 | "outputPrepend", 1294 | "outputPrepend", 1295 | "outputPrepend", 1296 | "outputPrepend", 1297 | "outputPrepend", 1298 | "outputPrepend", 1299 | "outputPrepend", 1300 | "outputPrepend", 1301 | "outputPrepend", 1302 | "outputPrepend", 1303 | "outputPrepend", 1304 | "outputPrepend", 1305 | "outputPrepend", 1306 | "outputPrepend", 1307 | "outputPrepend", 1308 | "outputPrepend", 1309 | "outputPrepend", 1310 | "outputPrepend", 1311 | "outputPrepend", 1312 | "outputPrepend", 1313 | "outputPrepend", 1314 | "outputPrepend", 1315 | "outputPrepend", 1316 | "outputPrepend", 1317 | "outputPrepend", 1318 | "outputPrepend", 1319 | "outputPrepend", 1320 | "outputPrepend", 1321 | "outputPrepend", 1322 | "outputPrepend", 1323 | "outputPrepend", 1324 | "outputPrepend", 1325 | "outputPrepend", 1326 | "outputPrepend", 1327 | "outputPrepend", 1328 | "outputPrepend", 1329 | "outputPrepend", 1330 | "outputPrepend", 1331 | "outputPrepend", 1332 | "outputPrepend", 1333 | "outputPrepend", 1334 | "outputPrepend", 1335 | "outputPrepend", 1336 | "outputPrepend", 1337 | "outputPrepend", 1338 | "outputPrepend", 1339 | "outputPrepend", 1340 | "outputPrepend", 1341 | "outputPrepend", 1342 | "outputPrepend", 1343 | "outputPrepend", 1344 | "outputPrepend", 1345 | "outputPrepend", 1346 | "outputPrepend", 1347 | "outputPrepend", 1348 | "outputPrepend", 1349 | "outputPrepend", 1350 | "outputPrepend", 1351 | "outputPrepend", 1352 | "outputPrepend", 1353 | "outputPrepend", 1354 | "outputPrepend", 1355 | "outputPrepend", 1356 | "outputPrepend", 1357 | "outputPrepend", 1358 | "outputPrepend", 1359 | "outputPrepend", 1360 | "outputPrepend", 1361 | "outputPrepend", 1362 | "outputPrepend", 1363 | "outputPrepend", 1364 | "outputPrepend", 1365 | "outputPrepend", 1366 | "outputPrepend", 1367 | "outputPrepend", 1368 | "outputPrepend", 1369 | "outputPrepend", 1370 | "outputPrepend", 1371 | "outputPrepend", 1372 | "outputPrepend", 1373 | "outputPrepend", 1374 | "outputPrepend", 1375 | "outputPrepend", 1376 | "outputPrepend", 1377 | "outputPrepend", 1378 | "outputPrepend", 1379 | "outputPrepend", 1380 | "outputPrepend", 1381 | "outputPrepend", 1382 | "outputPrepend", 1383 | "outputPrepend", 1384 | "outputPrepend", 1385 | "outputPrepend", 1386 | "outputPrepend", 1387 | "outputPrepend", 1388 | "outputPrepend", 1389 | "outputPrepend", 1390 | "outputPrepend", 1391 | "outputPrepend", 1392 | "outputPrepend", 1393 | "outputPrepend", 1394 | "outputPrepend", 1395 | "outputPrepend", 1396 | "outputPrepend", 1397 | "outputPrepend", 1398 | "outputPrepend", 1399 | "outputPrepend", 1400 | "outputPrepend", 1401 | "outputPrepend", 1402 | "outputPrepend", 1403 | "outputPrepend", 1404 | "outputPrepend", 1405 | "outputPrepend", 1406 | "outputPrepend", 1407 | "outputPrepend", 1408 | "outputPrepend", 1409 | "outputPrepend", 1410 | "outputPrepend", 1411 | "outputPrepend", 1412 | "outputPrepend", 1413 | "outputPrepend", 1414 | "outputPrepend", 1415 | "outputPrepend", 1416 | "outputPrepend", 1417 | "outputPrepend", 1418 | "outputPrepend", 1419 | "outputPrepend", 1420 | "outputPrepend", 1421 | "outputPrepend", 1422 | "outputPrepend", 1423 | "outputPrepend", 1424 | "outputPrepend", 1425 | "outputPrepend", 1426 | "outputPrepend", 1427 | "outputPrepend", 1428 | "outputPrepend", 1429 | "outputPrepend", 1430 | "outputPrepend", 1431 | "outputPrepend", 1432 | "outputPrepend", 1433 | "outputPrepend", 1434 | "outputPrepend", 1435 | "outputPrepend", 1436 | "outputPrepend", 1437 | "outputPrepend", 1438 | "outputPrepend", 1439 | "outputPrepend", 1440 | "outputPrepend", 1441 | "outputPrepend", 1442 | "outputPrepend", 1443 | "outputPrepend", 1444 | "outputPrepend", 1445 | "outputPrepend", 1446 | "outputPrepend", 1447 | "outputPrepend", 1448 | "outputPrepend", 1449 | "outputPrepend", 1450 | "outputPrepend", 1451 | "outputPrepend", 1452 | "outputPrepend", 1453 | "outputPrepend", 1454 | "outputPrepend", 1455 | "outputPrepend", 1456 | "outputPrepend", 1457 | "outputPrepend", 1458 | "outputPrepend", 1459 | "outputPrepend", 1460 | "outputPrepend", 1461 | "outputPrepend", 1462 | "outputPrepend", 1463 | "outputPrepend", 1464 | "outputPrepend", 1465 | "outputPrepend", 1466 | "outputPrepend", 1467 | "outputPrepend", 1468 | "outputPrepend", 1469 | "outputPrepend", 1470 | "outputPrepend", 1471 | "outputPrepend", 1472 | "outputPrepend", 1473 | "outputPrepend", 1474 | "outputPrepend", 1475 | "outputPrepend", 1476 | "outputPrepend", 1477 | "outputPrepend", 1478 | "outputPrepend", 1479 | "outputPrepend", 1480 | "outputPrepend", 1481 | "outputPrepend", 1482 | "outputPrepend", 1483 | "outputPrepend", 1484 | "outputPrepend", 1485 | "outputPrepend", 1486 | "outputPrepend", 1487 | "outputPrepend", 1488 | "outputPrepend", 1489 | "outputPrepend", 1490 | "outputPrepend", 1491 | "outputPrepend", 1492 | "outputPrepend", 1493 | "outputPrepend", 1494 | "outputPrepend", 1495 | "outputPrepend", 1496 | "outputPrepend", 1497 | "outputPrepend", 1498 | "outputPrepend", 1499 | "outputPrepend", 1500 | "outputPrepend", 1501 | "outputPrepend", 1502 | "outputPrepend", 1503 | "outputPrepend", 1504 | "outputPrepend", 1505 | "outputPrepend", 1506 | "outputPrepend", 1507 | "outputPrepend", 1508 | "outputPrepend", 1509 | "outputPrepend", 1510 | "outputPrepend", 1511 | "outputPrepend", 1512 | "outputPrepend", 1513 | "outputPrepend", 1514 | "outputPrepend", 1515 | "outputPrepend", 1516 | "outputPrepend", 1517 | "outputPrepend", 1518 | "outputPrepend", 1519 | "outputPrepend", 1520 | "outputPrepend", 1521 | "outputPrepend", 1522 | "outputPrepend", 1523 | "outputPrepend", 1524 | "outputPrepend", 1525 | "outputPrepend", 1526 | "outputPrepend", 1527 | "outputPrepend", 1528 | "outputPrepend", 1529 | "outputPrepend", 1530 | "outputPrepend", 1531 | "outputPrepend", 1532 | "outputPrepend", 1533 | "outputPrepend", 1534 | "outputPrepend", 1535 | "outputPrepend", 1536 | "outputPrepend", 1537 | "outputPrepend", 1538 | "outputPrepend", 1539 | "outputPrepend", 1540 | "outputPrepend", 1541 | "outputPrepend", 1542 | "outputPrepend", 1543 | "outputPrepend", 1544 | "outputPrepend", 1545 | "outputPrepend", 1546 | "outputPrepend", 1547 | "outputPrepend", 1548 | "outputPrepend", 1549 | "outputPrepend", 1550 | "outputPrepend", 1551 | "outputPrepend", 1552 | "outputPrepend", 1553 | "outputPrepend", 1554 | "outputPrepend", 1555 | "outputPrepend", 1556 | "outputPrepend", 1557 | "outputPrepend", 1558 | "outputPrepend", 1559 | "outputPrepend", 1560 | "outputPrepend", 1561 | "outputPrepend", 1562 | "outputPrepend", 1563 | "outputPrepend", 1564 | "outputPrepend", 1565 | "outputPrepend", 1566 | "outputPrepend", 1567 | "outputPrepend", 1568 | "outputPrepend", 1569 | "outputPrepend", 1570 | "outputPrepend", 1571 | "outputPrepend", 1572 | "outputPrepend", 1573 | "outputPrepend", 1574 | "outputPrepend", 1575 | "outputPrepend", 1576 | "outputPrepend", 1577 | "outputPrepend", 1578 | "outputPrepend", 1579 | "outputPrepend", 1580 | "outputPrepend", 1581 | "outputPrepend", 1582 | "outputPrepend", 1583 | "outputPrepend", 1584 | "outputPrepend", 1585 | "outputPrepend", 1586 | "outputPrepend", 1587 | "outputPrepend", 1588 | "outputPrepend", 1589 | "outputPrepend", 1590 | "outputPrepend", 1591 | "outputPrepend", 1592 | "outputPrepend", 1593 | "outputPrepend", 1594 | "outputPrepend", 1595 | "outputPrepend", 1596 | "outputPrepend", 1597 | "outputPrepend", 1598 | "outputPrepend", 1599 | "outputPrepend", 1600 | "outputPrepend", 1601 | "outputPrepend", 1602 | "outputPrepend", 1603 | "outputPrepend", 1604 | "outputPrepend", 1605 | "outputPrepend", 1606 | "outputPrepend", 1607 | "outputPrepend", 1608 | "outputPrepend", 1609 | "outputPrepend", 1610 | "outputPrepend", 1611 | "outputPrepend", 1612 | "outputPrepend", 1613 | "outputPrepend", 1614 | "outputPrepend", 1615 | "outputPrepend", 1616 | "outputPrepend", 1617 | "outputPrepend", 1618 | "outputPrepend", 1619 | "outputPrepend", 1620 | "outputPrepend", 1621 | "outputPrepend", 1622 | "outputPrepend", 1623 | "outputPrepend", 1624 | "outputPrepend", 1625 | "outputPrepend", 1626 | "outputPrepend", 1627 | "outputPrepend", 1628 | "outputPrepend", 1629 | "outputPrepend", 1630 | "outputPrepend", 1631 | "outputPrepend", 1632 | "outputPrepend", 1633 | "outputPrepend", 1634 | "outputPrepend", 1635 | "outputPrepend", 1636 | "outputPrepend", 1637 | "outputPrepend", 1638 | "outputPrepend", 1639 | "outputPrepend", 1640 | "outputPrepend", 1641 | "outputPrepend", 1642 | "outputPrepend", 1643 | "outputPrepend", 1644 | "outputPrepend", 1645 | "outputPrepend", 1646 | "outputPrepend", 1647 | "outputPrepend", 1648 | "outputPrepend", 1649 | "outputPrepend", 1650 | "outputPrepend", 1651 | "outputPrepend", 1652 | "outputPrepend", 1653 | "outputPrepend", 1654 | "outputPrepend", 1655 | "outputPrepend", 1656 | "outputPrepend", 1657 | "outputPrepend", 1658 | "outputPrepend", 1659 | "outputPrepend", 1660 | "outputPrepend", 1661 | "outputPrepend", 1662 | "outputPrepend", 1663 | "outputPrepend", 1664 | "outputPrepend", 1665 | "outputPrepend", 1666 | "outputPrepend", 1667 | "outputPrepend", 1668 | "outputPrepend", 1669 | "outputPrepend", 1670 | "outputPrepend", 1671 | "outputPrepend", 1672 | "outputPrepend", 1673 | "outputPrepend", 1674 | "outputPrepend", 1675 | "outputPrepend", 1676 | "outputPrepend", 1677 | "outputPrepend", 1678 | "outputPrepend", 1679 | "outputPrepend", 1680 | "outputPrepend", 1681 | "outputPrepend", 1682 | "outputPrepend", 1683 | "outputPrepend", 1684 | "outputPrepend", 1685 | "outputPrepend", 1686 | "outputPrepend", 1687 | "outputPrepend", 1688 | "outputPrepend", 1689 | "outputPrepend", 1690 | "outputPrepend", 1691 | "outputPrepend", 1692 | "outputPrepend", 1693 | "outputPrepend", 1694 | "outputPrepend", 1695 | "outputPrepend", 1696 | "outputPrepend", 1697 | "outputPrepend", 1698 | "outputPrepend", 1699 | "outputPrepend", 1700 | "outputPrepend", 1701 | "outputPrepend", 1702 | "outputPrepend", 1703 | "outputPrepend", 1704 | "outputPrepend", 1705 | "outputPrepend", 1706 | "outputPrepend", 1707 | "outputPrepend", 1708 | "outputPrepend", 1709 | "outputPrepend", 1710 | "outputPrepend", 1711 | "outputPrepend", 1712 | "outputPrepend", 1713 | "outputPrepend", 1714 | "outputPrepend", 1715 | "outputPrepend", 1716 | "outputPrepend", 1717 | "outputPrepend", 1718 | "outputPrepend", 1719 | "outputPrepend", 1720 | "outputPrepend", 1721 | "outputPrepend", 1722 | "outputPrepend", 1723 | "outputPrepend", 1724 | "outputPrepend", 1725 | "outputPrepend", 1726 | "outputPrepend", 1727 | "outputPrepend", 1728 | "outputPrepend", 1729 | "outputPrepend", 1730 | "outputPrepend", 1731 | "outputPrepend", 1732 | "outputPrepend", 1733 | "outputPrepend", 1734 | "outputPrepend", 1735 | "outputPrepend", 1736 | "outputPrepend", 1737 | "outputPrepend", 1738 | "outputPrepend", 1739 | "outputPrepend", 1740 | "outputPrepend", 1741 | "outputPrepend", 1742 | "outputPrepend", 1743 | "outputPrepend", 1744 | "outputPrepend", 1745 | "outputPrepend", 1746 | "outputPrepend", 1747 | "outputPrepend", 1748 | "outputPrepend", 1749 | "outputPrepend", 1750 | "outputPrepend", 1751 | "outputPrepend", 1752 | "outputPrepend", 1753 | "outputPrepend", 1754 | "outputPrepend", 1755 | "outputPrepend", 1756 | "outputPrepend", 1757 | "outputPrepend", 1758 | "outputPrepend", 1759 | "outputPrepend", 1760 | "outputPrepend", 1761 | "outputPrepend", 1762 | "outputPrepend", 1763 | "outputPrepend", 1764 | "outputPrepend", 1765 | "outputPrepend", 1766 | "outputPrepend", 1767 | "outputPrepend", 1768 | "outputPrepend", 1769 | "outputPrepend", 1770 | "outputPrepend", 1771 | "outputPrepend", 1772 | "outputPrepend", 1773 | "outputPrepend", 1774 | "outputPrepend", 1775 | "outputPrepend", 1776 | "outputPrepend", 1777 | "outputPrepend", 1778 | "outputPrepend", 1779 | "outputPrepend", 1780 | "outputPrepend", 1781 | "outputPrepend", 1782 | "outputPrepend", 1783 | "outputPrepend", 1784 | "outputPrepend", 1785 | "outputPrepend", 1786 | "outputPrepend", 1787 | "outputPrepend", 1788 | "outputPrepend", 1789 | "outputPrepend", 1790 | "outputPrepend", 1791 | "outputPrepend", 1792 | "outputPrepend", 1793 | "outputPrepend", 1794 | "outputPrepend", 1795 | "outputPrepend", 1796 | "outputPrepend", 1797 | "outputPrepend", 1798 | "outputPrepend", 1799 | "outputPrepend", 1800 | "outputPrepend", 1801 | "outputPrepend", 1802 | "outputPrepend", 1803 | "outputPrepend", 1804 | "outputPrepend", 1805 | "outputPrepend", 1806 | "outputPrepend", 1807 | "outputPrepend", 1808 | "outputPrepend", 1809 | "outputPrepend", 1810 | "outputPrepend", 1811 | "outputPrepend", 1812 | "outputPrepend", 1813 | "outputPrepend", 1814 | "outputPrepend", 1815 | "outputPrepend", 1816 | "outputPrepend", 1817 | "outputPrepend", 1818 | "outputPrepend", 1819 | "outputPrepend", 1820 | "outputPrepend", 1821 | "outputPrepend", 1822 | "outputPrepend", 1823 | "outputPrepend", 1824 | "outputPrepend", 1825 | "outputPrepend", 1826 | "outputPrepend", 1827 | "outputPrepend", 1828 | "outputPrepend", 1829 | "outputPrepend", 1830 | "outputPrepend", 1831 | "outputPrepend", 1832 | "outputPrepend", 1833 | "outputPrepend", 1834 | "outputPrepend", 1835 | "outputPrepend", 1836 | "outputPrepend", 1837 | "outputPrepend", 1838 | "outputPrepend", 1839 | "outputPrepend", 1840 | "outputPrepend", 1841 | "outputPrepend", 1842 | "outputPrepend", 1843 | "outputPrepend", 1844 | "outputPrepend", 1845 | "outputPrepend", 1846 | "outputPrepend", 1847 | "outputPrepend", 1848 | "outputPrepend", 1849 | "outputPrepend", 1850 | "outputPrepend", 1851 | "outputPrepend", 1852 | "outputPrepend", 1853 | "outputPrepend", 1854 | "outputPrepend", 1855 | "outputPrepend", 1856 | "outputPrepend", 1857 | "outputPrepend", 1858 | "outputPrepend", 1859 | "outputPrepend", 1860 | "outputPrepend", 1861 | "outputPrepend", 1862 | "outputPrepend", 1863 | "outputPrepend", 1864 | "outputPrepend", 1865 | "outputPrepend", 1866 | "outputPrepend", 1867 | "outputPrepend", 1868 | "outputPrepend", 1869 | "outputPrepend", 1870 | "outputPrepend", 1871 | "outputPrepend", 1872 | "outputPrepend", 1873 | "outputPrepend", 1874 | "outputPrepend", 1875 | "outputPrepend", 1876 | "outputPrepend", 1877 | "outputPrepend", 1878 | "outputPrepend", 1879 | "outputPrepend", 1880 | "outputPrepend", 1881 | "outputPrepend", 1882 | "outputPrepend", 1883 | "outputPrepend", 1884 | "outputPrepend", 1885 | "outputPrepend", 1886 | "outputPrepend", 1887 | "outputPrepend", 1888 | "outputPrepend", 1889 | "outputPrepend", 1890 | "outputPrepend", 1891 | "outputPrepend", 1892 | "outputPrepend", 1893 | "outputPrepend", 1894 | "outputPrepend", 1895 | "outputPrepend", 1896 | "outputPrepend", 1897 | "outputPrepend", 1898 | "outputPrepend", 1899 | "outputPrepend", 1900 | "outputPrepend", 1901 | "outputPrepend", 1902 | "outputPrepend", 1903 | "outputPrepend", 1904 | "outputPrepend", 1905 | "outputPrepend", 1906 | "outputPrepend", 1907 | "outputPrepend", 1908 | "outputPrepend", 1909 | "outputPrepend", 1910 | "outputPrepend", 1911 | "outputPrepend", 1912 | "outputPrepend", 1913 | "outputPrepend", 1914 | "outputPrepend", 1915 | "outputPrepend", 1916 | "outputPrepend", 1917 | "outputPrepend", 1918 | "outputPrepend", 1919 | "outputPrepend", 1920 | "outputPrepend", 1921 | "outputPrepend", 1922 | "outputPrepend", 1923 | "outputPrepend", 1924 | "outputPrepend", 1925 | "outputPrepend", 1926 | "outputPrepend", 1927 | "outputPrepend", 1928 | "outputPrepend", 1929 | "outputPrepend", 1930 | "outputPrepend", 1931 | "outputPrepend", 1932 | "outputPrepend", 1933 | "outputPrepend", 1934 | "outputPrepend", 1935 | "outputPrepend", 1936 | "outputPrepend", 1937 | "outputPrepend", 1938 | "outputPrepend", 1939 | "outputPrepend", 1940 | "outputPrepend", 1941 | "outputPrepend", 1942 | "outputPrepend", 1943 | "outputPrepend", 1944 | "outputPrepend", 1945 | "outputPrepend", 1946 | "outputPrepend", 1947 | "outputPrepend", 1948 | "outputPrepend", 1949 | "outputPrepend", 1950 | "outputPrepend", 1951 | "outputPrepend", 1952 | "outputPrepend", 1953 | "outputPrepend", 1954 | "outputPrepend", 1955 | "outputPrepend", 1956 | "outputPrepend", 1957 | "outputPrepend", 1958 | "outputPrepend", 1959 | "outputPrepend", 1960 | "outputPrepend", 1961 | "outputPrepend", 1962 | "outputPrepend", 1963 | "outputPrepend", 1964 | "outputPrepend", 1965 | "outputPrepend", 1966 | "outputPrepend", 1967 | "outputPrepend", 1968 | "outputPrepend", 1969 | "outputPrepend", 1970 | "outputPrepend", 1971 | "outputPrepend", 1972 | "outputPrepend", 1973 | "outputPrepend", 1974 | "outputPrepend", 1975 | "outputPrepend", 1976 | "outputPrepend", 1977 | "outputPrepend", 1978 | "outputPrepend", 1979 | "outputPrepend", 1980 | "outputPrepend", 1981 | "outputPrepend", 1982 | "outputPrepend", 1983 | "outputPrepend", 1984 | "outputPrepend", 1985 | "outputPrepend", 1986 | "outputPrepend", 1987 | "outputPrepend", 1988 | "outputPrepend", 1989 | "outputPrepend", 1990 | "outputPrepend", 1991 | "outputPrepend", 1992 | "outputPrepend", 1993 | "outputPrepend", 1994 | "outputPrepend", 1995 | "outputPrepend", 1996 | "outputPrepend", 1997 | "outputPrepend", 1998 | "outputPrepend", 1999 | "outputPrepend", 2000 | "outputPrepend", 2001 | "outputPrepend", 2002 | "outputPrepend", 2003 | "outputPrepend", 2004 | "outputPrepend", 2005 | "outputPrepend", 2006 | "outputPrepend", 2007 | "outputPrepend", 2008 | "outputPrepend", 2009 | "outputPrepend", 2010 | "outputPrepend", 2011 | "outputPrepend", 2012 | "outputPrepend", 2013 | "outputPrepend", 2014 | "outputPrepend", 2015 | "outputPrepend", 2016 | "outputPrepend", 2017 | "outputPrepend", 2018 | "outputPrepend", 2019 | "outputPrepend", 2020 | "outputPrepend", 2021 | "outputPrepend", 2022 | "outputPrepend", 2023 | "outputPrepend", 2024 | "outputPrepend", 2025 | "outputPrepend", 2026 | "outputPrepend", 2027 | "outputPrepend", 2028 | "outputPrepend", 2029 | "outputPrepend", 2030 | "outputPrepend", 2031 | "outputPrepend", 2032 | "outputPrepend", 2033 | "outputPrepend", 2034 | "outputPrepend", 2035 | "outputPrepend", 2036 | "outputPrepend", 2037 | "outputPrepend", 2038 | "outputPrepend", 2039 | "outputPrepend", 2040 | "outputPrepend", 2041 | "outputPrepend", 2042 | "outputPrepend", 2043 | "outputPrepend", 2044 | "outputPrepend", 2045 | "outputPrepend", 2046 | "outputPrepend", 2047 | "outputPrepend", 2048 | "outputPrepend", 2049 | "outputPrepend", 2050 | "outputPrepend", 2051 | "outputPrepend", 2052 | "outputPrepend", 2053 | "outputPrepend", 2054 | "outputPrepend", 2055 | "outputPrepend", 2056 | "outputPrepend", 2057 | "outputPrepend", 2058 | "outputPrepend", 2059 | "outputPrepend", 2060 | "outputPrepend", 2061 | "outputPrepend", 2062 | "outputPrepend", 2063 | "outputPrepend", 2064 | "outputPrepend", 2065 | "outputPrepend", 2066 | "outputPrepend", 2067 | "outputPrepend", 2068 | "outputPrepend", 2069 | "outputPrepend", 2070 | "outputPrepend", 2071 | "outputPrepend", 2072 | "outputPrepend", 2073 | "outputPrepend", 2074 | "outputPrepend", 2075 | "outputPrepend", 2076 | "outputPrepend", 2077 | "outputPrepend", 2078 | "outputPrepend", 2079 | "outputPrepend", 2080 | "outputPrepend", 2081 | "outputPrepend", 2082 | "outputPrepend", 2083 | "outputPrepend", 2084 | "outputPrepend", 2085 | "outputPrepend", 2086 | "outputPrepend", 2087 | "outputPrepend", 2088 | "outputPrepend", 2089 | "outputPrepend", 2090 | "outputPrepend", 2091 | "outputPrepend", 2092 | "outputPrepend", 2093 | "outputPrepend", 2094 | "outputPrepend", 2095 | "outputPrepend", 2096 | "outputPrepend", 2097 | "outputPrepend", 2098 | "outputPrepend", 2099 | "outputPrepend", 2100 | "outputPrepend", 2101 | "outputPrepend", 2102 | "outputPrepend", 2103 | "outputPrepend", 2104 | "outputPrepend", 2105 | "outputPrepend", 2106 | "outputPrepend", 2107 | "outputPrepend", 2108 | "outputPrepend", 2109 | "outputPrepend", 2110 | "outputPrepend", 2111 | "outputPrepend", 2112 | "outputPrepend", 2113 | "outputPrepend", 2114 | "outputPrepend", 2115 | "outputPrepend", 2116 | "outputPrepend", 2117 | "outputPrepend", 2118 | "outputPrepend", 2119 | "outputPrepend", 2120 | "outputPrepend", 2121 | "outputPrepend", 2122 | "outputPrepend", 2123 | "outputPrepend", 2124 | "outputPrepend", 2125 | "outputPrepend", 2126 | "outputPrepend", 2127 | "outputPrepend", 2128 | "outputPrepend", 2129 | "outputPrepend", 2130 | "outputPrepend", 2131 | "outputPrepend", 2132 | "outputPrepend", 2133 | "outputPrepend", 2134 | "outputPrepend", 2135 | "outputPrepend", 2136 | "outputPrepend", 2137 | "outputPrepend", 2138 | "outputPrepend", 2139 | "outputPrepend", 2140 | "outputPrepend", 2141 | "outputPrepend", 2142 | "outputPrepend", 2143 | "outputPrepend", 2144 | "outputPrepend", 2145 | "outputPrepend", 2146 | "outputPrepend", 2147 | "outputPrepend", 2148 | "outputPrepend", 2149 | "outputPrepend", 2150 | "outputPrepend", 2151 | "outputPrepend", 2152 | "outputPrepend", 2153 | "outputPrepend", 2154 | "outputPrepend", 2155 | "outputPrepend", 2156 | "outputPrepend", 2157 | "outputPrepend", 2158 | "outputPrepend", 2159 | "outputPrepend", 2160 | "outputPrepend", 2161 | "outputPrepend", 2162 | "outputPrepend", 2163 | "outputPrepend", 2164 | "outputPrepend", 2165 | "outputPrepend", 2166 | "outputPrepend", 2167 | "outputPrepend", 2168 | "outputPrepend", 2169 | "outputPrepend", 2170 | "outputPrepend", 2171 | "outputPrepend", 2172 | "outputPrepend", 2173 | "outputPrepend", 2174 | "outputPrepend", 2175 | "outputPrepend", 2176 | "outputPrepend", 2177 | "outputPrepend", 2178 | "outputPrepend", 2179 | "outputPrepend", 2180 | "outputPrepend", 2181 | "outputPrepend", 2182 | "outputPrepend", 2183 | "outputPrepend", 2184 | "outputPrepend", 2185 | "outputPrepend", 2186 | "outputPrepend", 2187 | "outputPrepend", 2188 | "outputPrepend", 2189 | "outputPrepend", 2190 | "outputPrepend", 2191 | "outputPrepend", 2192 | "outputPrepend", 2193 | "outputPrepend", 2194 | "outputPrepend", 2195 | "outputPrepend", 2196 | "outputPrepend", 2197 | "outputPrepend", 2198 | "outputPrepend", 2199 | "outputPrepend", 2200 | "outputPrepend", 2201 | "outputPrepend", 2202 | "outputPrepend", 2203 | "outputPrepend", 2204 | "outputPrepend", 2205 | "outputPrepend", 2206 | "outputPrepend", 2207 | "outputPrepend", 2208 | "outputPrepend", 2209 | "outputPrepend", 2210 | "outputPrepend", 2211 | "outputPrepend", 2212 | "outputPrepend", 2213 | "outputPrepend", 2214 | "outputPrepend", 2215 | "outputPrepend", 2216 | "outputPrepend", 2217 | "outputPrepend", 2218 | "outputPrepend", 2219 | "outputPrepend", 2220 | "outputPrepend", 2221 | "outputPrepend", 2222 | "outputPrepend", 2223 | "outputPrepend", 2224 | "outputPrepend", 2225 | "outputPrepend", 2226 | "outputPrepend", 2227 | "outputPrepend", 2228 | "outputPrepend", 2229 | "outputPrepend", 2230 | "outputPrepend", 2231 | "outputPrepend", 2232 | "outputPrepend", 2233 | "outputPrepend", 2234 | "outputPrepend", 2235 | "outputPrepend", 2236 | "outputPrepend", 2237 | "outputPrepend", 2238 | "outputPrepend", 2239 | "outputPrepend", 2240 | "outputPrepend", 2241 | "outputPrepend", 2242 | "outputPrepend", 2243 | "outputPrepend", 2244 | "outputPrepend", 2245 | "outputPrepend", 2246 | "outputPrepend", 2247 | "outputPrepend", 2248 | "outputPrepend", 2249 | "outputPrepend", 2250 | "outputPrepend", 2251 | "outputPrepend", 2252 | "outputPrepend", 2253 | "outputPrepend", 2254 | "outputPrepend", 2255 | "outputPrepend", 2256 | "outputPrepend", 2257 | "outputPrepend", 2258 | "outputPrepend", 2259 | "outputPrepend", 2260 | "outputPrepend", 2261 | "outputPrepend", 2262 | "outputPrepend", 2263 | "outputPrepend", 2264 | "outputPrepend", 2265 | "outputPrepend", 2266 | "outputPrepend", 2267 | "outputPrepend", 2268 | "outputPrepend", 2269 | "outputPrepend", 2270 | "outputPrepend", 2271 | "outputPrepend", 2272 | "outputPrepend", 2273 | "outputPrepend", 2274 | "outputPrepend", 2275 | "outputPrepend", 2276 | "outputPrepend", 2277 | "outputPrepend", 2278 | "outputPrepend", 2279 | "outputPrepend", 2280 | "outputPrepend", 2281 | "outputPrepend", 2282 | "outputPrepend", 2283 | "outputPrepend", 2284 | "outputPrepend", 2285 | "outputPrepend", 2286 | "outputPrepend", 2287 | "outputPrepend", 2288 | "outputPrepend", 2289 | "outputPrepend", 2290 | "outputPrepend", 2291 | "outputPrepend", 2292 | "outputPrepend", 2293 | "outputPrepend", 2294 | "outputPrepend", 2295 | "outputPrepend", 2296 | "outputPrepend", 2297 | "outputPrepend", 2298 | "outputPrepend", 2299 | "outputPrepend", 2300 | "outputPrepend", 2301 | "outputPrepend", 2302 | "outputPrepend", 2303 | "outputPrepend", 2304 | "outputPrepend", 2305 | "outputPrepend", 2306 | "outputPrepend", 2307 | "outputPrepend", 2308 | "outputPrepend", 2309 | "outputPrepend", 2310 | "outputPrepend", 2311 | "outputPrepend", 2312 | "outputPrepend", 2313 | "outputPrepend", 2314 | "outputPrepend", 2315 | "outputPrepend", 2316 | "outputPrepend", 2317 | "outputPrepend", 2318 | "outputPrepend", 2319 | "outputPrepend", 2320 | "outputPrepend", 2321 | "outputPrepend", 2322 | "outputPrepend", 2323 | "outputPrepend", 2324 | "outputPrepend", 2325 | "outputPrepend", 2326 | "outputPrepend", 2327 | "outputPrepend", 2328 | "outputPrepend", 2329 | "outputPrepend", 2330 | "outputPrepend", 2331 | "outputPrepend", 2332 | "outputPrepend", 2333 | "outputPrepend", 2334 | "outputPrepend", 2335 | "outputPrepend", 2336 | "outputPrepend", 2337 | "outputPrepend", 2338 | "outputPrepend", 2339 | "outputPrepend", 2340 | "outputPrepend", 2341 | "outputPrepend", 2342 | "outputPrepend", 2343 | "outputPrepend", 2344 | "outputPrepend", 2345 | "outputPrepend", 2346 | "outputPrepend", 2347 | "outputPrepend", 2348 | "outputPrepend", 2349 | "outputPrepend", 2350 | "outputPrepend", 2351 | "outputPrepend", 2352 | "outputPrepend", 2353 | "outputPrepend", 2354 | "outputPrepend", 2355 | "outputPrepend", 2356 | "outputPrepend", 2357 | "outputPrepend", 2358 | "outputPrepend", 2359 | "outputPrepend", 2360 | "outputPrepend", 2361 | "outputPrepend", 2362 | "outputPrepend", 2363 | "outputPrepend", 2364 | "outputPrepend", 2365 | "outputPrepend", 2366 | "outputPrepend", 2367 | "outputPrepend", 2368 | "outputPrepend", 2369 | "outputPrepend", 2370 | "outputPrepend", 2371 | "outputPrepend", 2372 | "outputPrepend", 2373 | "outputPrepend", 2374 | "outputPrepend", 2375 | "outputPrepend", 2376 | "outputPrepend", 2377 | "outputPrepend", 2378 | "outputPrepend", 2379 | "outputPrepend", 2380 | "outputPrepend", 2381 | "outputPrepend", 2382 | "outputPrepend", 2383 | "outputPrepend", 2384 | "outputPrepend", 2385 | "outputPrepend", 2386 | "outputPrepend", 2387 | "outputPrepend", 2388 | "outputPrepend", 2389 | "outputPrepend", 2390 | "outputPrepend", 2391 | "outputPrepend", 2392 | "outputPrepend", 2393 | "outputPrepend", 2394 | "outputPrepend", 2395 | "outputPrepend", 2396 | "outputPrepend", 2397 | "outputPrepend", 2398 | "outputPrepend", 2399 | "outputPrepend", 2400 | "outputPrepend", 2401 | "outputPrepend", 2402 | "outputPrepend", 2403 | "outputPrepend", 2404 | "outputPrepend", 2405 | "outputPrepend", 2406 | "outputPrepend", 2407 | "outputPrepend", 2408 | "outputPrepend", 2409 | "outputPrepend", 2410 | "outputPrepend", 2411 | "outputPrepend", 2412 | "outputPrepend", 2413 | "outputPrepend", 2414 | "outputPrepend", 2415 | "outputPrepend", 2416 | "outputPrepend", 2417 | "outputPrepend", 2418 | "outputPrepend", 2419 | "outputPrepend", 2420 | "outputPrepend", 2421 | "outputPrepend", 2422 | "outputPrepend", 2423 | "outputPrepend", 2424 | "outputPrepend", 2425 | "outputPrepend", 2426 | "outputPrepend", 2427 | "outputPrepend", 2428 | "outputPrepend", 2429 | "outputPrepend", 2430 | "outputPrepend", 2431 | "outputPrepend", 2432 | "outputPrepend", 2433 | "outputPrepend", 2434 | "outputPrepend", 2435 | "outputPrepend", 2436 | "outputPrepend", 2437 | "outputPrepend", 2438 | "outputPrepend", 2439 | "outputPrepend", 2440 | "outputPrepend", 2441 | "outputPrepend", 2442 | "outputPrepend", 2443 | "outputPrepend", 2444 | "outputPrepend", 2445 | "outputPrepend", 2446 | "outputPrepend", 2447 | "outputPrepend", 2448 | "outputPrepend", 2449 | "outputPrepend", 2450 | "outputPrepend", 2451 | "outputPrepend", 2452 | "outputPrepend", 2453 | "outputPrepend", 2454 | "outputPrepend", 2455 | "outputPrepend", 2456 | "outputPrepend", 2457 | "outputPrepend", 2458 | "outputPrepend", 2459 | "outputPrepend", 2460 | "outputPrepend", 2461 | "outputPrepend", 2462 | "outputPrepend", 2463 | "outputPrepend", 2464 | "outputPrepend", 2465 | "outputPrepend", 2466 | "outputPrepend", 2467 | "outputPrepend", 2468 | "outputPrepend", 2469 | "outputPrepend", 2470 | "outputPrepend", 2471 | "outputPrepend", 2472 | "outputPrepend", 2473 | "outputPrepend", 2474 | "outputPrepend", 2475 | "outputPrepend", 2476 | "outputPrepend", 2477 | "outputPrepend", 2478 | "outputPrepend", 2479 | "outputPrepend", 2480 | "outputPrepend", 2481 | "outputPrepend", 2482 | "outputPrepend", 2483 | "outputPrepend", 2484 | "outputPrepend", 2485 | "outputPrepend", 2486 | "outputPrepend", 2487 | "outputPrepend", 2488 | "outputPrepend", 2489 | "outputPrepend", 2490 | "outputPrepend", 2491 | "outputPrepend", 2492 | "outputPrepend", 2493 | "outputPrepend", 2494 | "outputPrepend", 2495 | "outputPrepend", 2496 | "outputPrepend", 2497 | "outputPrepend", 2498 | "outputPrepend", 2499 | "outputPrepend", 2500 | "outputPrepend", 2501 | "outputPrepend", 2502 | "outputPrepend", 2503 | "outputPrepend", 2504 | "outputPrepend", 2505 | "outputPrepend", 2506 | "outputPrepend", 2507 | "outputPrepend", 2508 | "outputPrepend", 2509 | "outputPrepend", 2510 | "outputPrepend", 2511 | "outputPrepend", 2512 | "outputPrepend", 2513 | "outputPrepend", 2514 | "outputPrepend", 2515 | "outputPrepend", 2516 | "outputPrepend", 2517 | "outputPrepend", 2518 | "outputPrepend", 2519 | "outputPrepend", 2520 | "outputPrepend", 2521 | "outputPrepend", 2522 | "outputPrepend", 2523 | "outputPrepend", 2524 | "outputPrepend", 2525 | "outputPrepend", 2526 | "outputPrepend", 2527 | "outputPrepend", 2528 | "outputPrepend", 2529 | "outputPrepend", 2530 | "outputPrepend", 2531 | "outputPrepend", 2532 | "outputPrepend", 2533 | "outputPrepend", 2534 | "outputPrepend", 2535 | "outputPrepend", 2536 | "outputPrepend", 2537 | "outputPrepend", 2538 | "outputPrepend", 2539 | "outputPrepend", 2540 | "outputPrepend", 2541 | "outputPrepend", 2542 | "outputPrepend", 2543 | "outputPrepend", 2544 | "outputPrepend", 2545 | "outputPrepend", 2546 | "outputPrepend", 2547 | "outputPrepend", 2548 | "outputPrepend", 2549 | "outputPrepend", 2550 | "outputPrepend", 2551 | "outputPrepend", 2552 | "outputPrepend", 2553 | "outputPrepend", 2554 | "outputPrepend", 2555 | "outputPrepend", 2556 | "outputPrepend", 2557 | "outputPrepend", 2558 | "outputPrepend", 2559 | "outputPrepend", 2560 | "outputPrepend", 2561 | "outputPrepend", 2562 | "outputPrepend", 2563 | "outputPrepend", 2564 | "outputPrepend", 2565 | "outputPrepend", 2566 | "outputPrepend", 2567 | "outputPrepend", 2568 | "outputPrepend", 2569 | "outputPrepend", 2570 | "outputPrepend", 2571 | "outputPrepend", 2572 | "outputPrepend", 2573 | "outputPrepend", 2574 | "outputPrepend", 2575 | "outputPrepend", 2576 | "outputPrepend", 2577 | "outputPrepend", 2578 | "outputPrepend", 2579 | "outputPrepend", 2580 | "outputPrepend", 2581 | "outputPrepend", 2582 | "outputPrepend", 2583 | "outputPrepend", 2584 | "outputPrepend", 2585 | "outputPrepend", 2586 | "outputPrepend", 2587 | "outputPrepend", 2588 | "outputPrepend", 2589 | "outputPrepend", 2590 | "outputPrepend", 2591 | "outputPrepend", 2592 | "outputPrepend", 2593 | "outputPrepend", 2594 | "outputPrepend", 2595 | "outputPrepend", 2596 | "outputPrepend", 2597 | "outputPrepend", 2598 | "outputPrepend", 2599 | "outputPrepend", 2600 | "outputPrepend", 2601 | "outputPrepend", 2602 | "outputPrepend", 2603 | "outputPrepend", 2604 | "outputPrepend", 2605 | "outputPrepend", 2606 | "outputPrepend", 2607 | "outputPrepend", 2608 | "outputPrepend", 2609 | "outputPrepend", 2610 | "outputPrepend", 2611 | "outputPrepend", 2612 | "outputPrepend", 2613 | "outputPrepend", 2614 | "outputPrepend", 2615 | "outputPrepend", 2616 | "outputPrepend", 2617 | "outputPrepend", 2618 | "outputPrepend", 2619 | "outputPrepend", 2620 | "outputPrepend", 2621 | "outputPrepend", 2622 | "outputPrepend", 2623 | "outputPrepend", 2624 | "outputPrepend", 2625 | "outputPrepend", 2626 | "outputPrepend", 2627 | "outputPrepend", 2628 | "outputPrepend", 2629 | "outputPrepend", 2630 | "outputPrepend", 2631 | "outputPrepend", 2632 | "outputPrepend", 2633 | "outputPrepend", 2634 | "outputPrepend", 2635 | "outputPrepend", 2636 | "outputPrepend", 2637 | "outputPrepend", 2638 | "outputPrepend", 2639 | "outputPrepend", 2640 | "outputPrepend", 2641 | "outputPrepend", 2642 | "outputPrepend", 2643 | "outputPrepend", 2644 | "outputPrepend", 2645 | "outputPrepend", 2646 | "outputPrepend", 2647 | "outputPrepend", 2648 | "outputPrepend", 2649 | "outputPrepend", 2650 | "outputPrepend", 2651 | "outputPrepend", 2652 | "outputPrepend", 2653 | "outputPrepend", 2654 | "outputPrepend", 2655 | "outputPrepend", 2656 | "outputPrepend", 2657 | "outputPrepend", 2658 | "outputPrepend", 2659 | "outputPrepend", 2660 | "outputPrepend", 2661 | "outputPrepend", 2662 | "outputPrepend", 2663 | "outputPrepend", 2664 | "outputPrepend", 2665 | "outputPrepend", 2666 | "outputPrepend", 2667 | "outputPrepend", 2668 | "outputPrepend", 2669 | "outputPrepend", 2670 | "outputPrepend", 2671 | "outputPrepend", 2672 | "outputPrepend", 2673 | "outputPrepend", 2674 | "outputPrepend", 2675 | "outputPrepend", 2676 | "outputPrepend", 2677 | "outputPrepend", 2678 | "outputPrepend", 2679 | "outputPrepend", 2680 | "outputPrepend", 2681 | "outputPrepend", 2682 | "outputPrepend", 2683 | "outputPrepend", 2684 | "outputPrepend", 2685 | "outputPrepend", 2686 | "outputPrepend", 2687 | "outputPrepend", 2688 | "outputPrepend", 2689 | "outputPrepend", 2690 | "outputPrepend", 2691 | "outputPrepend", 2692 | "outputPrepend", 2693 | "outputPrepend", 2694 | "outputPrepend", 2695 | "outputPrepend", 2696 | "outputPrepend", 2697 | "outputPrepend", 2698 | "outputPrepend", 2699 | "outputPrepend", 2700 | "outputPrepend", 2701 | "outputPrepend", 2702 | "outputPrepend", 2703 | "outputPrepend", 2704 | "outputPrepend", 2705 | "outputPrepend", 2706 | "outputPrepend", 2707 | "outputPrepend", 2708 | "outputPrepend", 2709 | "outputPrepend", 2710 | "outputPrepend", 2711 | "outputPrepend", 2712 | "outputPrepend", 2713 | "outputPrepend", 2714 | "outputPrepend", 2715 | "outputPrepend", 2716 | "outputPrepend", 2717 | "outputPrepend", 2718 | "outputPrepend", 2719 | "outputPrepend", 2720 | "outputPrepend", 2721 | "outputPrepend", 2722 | "outputPrepend", 2723 | "outputPrepend", 2724 | "outputPrepend", 2725 | "outputPrepend", 2726 | "outputPrepend", 2727 | "outputPrepend", 2728 | "outputPrepend", 2729 | "outputPrepend", 2730 | "outputPrepend", 2731 | "outputPrepend", 2732 | "outputPrepend", 2733 | "outputPrepend", 2734 | "outputPrepend", 2735 | "outputPrepend", 2736 | "outputPrepend", 2737 | "outputPrepend", 2738 | "outputPrepend", 2739 | "outputPrepend", 2740 | "outputPrepend", 2741 | "outputPrepend", 2742 | "outputPrepend", 2743 | "outputPrepend", 2744 | "outputPrepend", 2745 | "outputPrepend", 2746 | "outputPrepend", 2747 | "outputPrepend", 2748 | "outputPrepend", 2749 | "outputPrepend", 2750 | "outputPrepend", 2751 | "outputPrepend", 2752 | "outputPrepend", 2753 | "outputPrepend", 2754 | "outputPrepend", 2755 | "outputPrepend", 2756 | "outputPrepend", 2757 | "outputPrepend", 2758 | "outputPrepend", 2759 | "outputPrepend", 2760 | "outputPrepend", 2761 | "outputPrepend", 2762 | "outputPrepend", 2763 | "outputPrepend", 2764 | "outputPrepend", 2765 | "outputPrepend", 2766 | "outputPrepend", 2767 | "outputPrepend", 2768 | "outputPrepend", 2769 | "outputPrepend", 2770 | "outputPrepend", 2771 | "outputPrepend", 2772 | "outputPrepend", 2773 | "outputPrepend", 2774 | "outputPrepend", 2775 | "outputPrepend", 2776 | "outputPrepend", 2777 | "outputPrepend", 2778 | "outputPrepend", 2779 | "outputPrepend", 2780 | "outputPrepend", 2781 | "outputPrepend", 2782 | "outputPrepend", 2783 | "outputPrepend", 2784 | "outputPrepend", 2785 | "outputPrepend", 2786 | "outputPrepend", 2787 | "outputPrepend", 2788 | "outputPrepend", 2789 | "outputPrepend", 2790 | "outputPrepend", 2791 | "outputPrepend", 2792 | "outputPrepend", 2793 | "outputPrepend", 2794 | "outputPrepend", 2795 | "outputPrepend", 2796 | "outputPrepend", 2797 | "outputPrepend", 2798 | "outputPrepend", 2799 | "outputPrepend", 2800 | "outputPrepend", 2801 | "outputPrepend", 2802 | "outputPrepend", 2803 | "outputPrepend", 2804 | "outputPrepend", 2805 | "outputPrepend", 2806 | "outputPrepend", 2807 | "outputPrepend", 2808 | "outputPrepend", 2809 | "outputPrepend", 2810 | "outputPrepend", 2811 | "outputPrepend", 2812 | "outputPrepend", 2813 | "outputPrepend", 2814 | "outputPrepend", 2815 | "outputPrepend", 2816 | "outputPrepend", 2817 | "outputPrepend", 2818 | "outputPrepend", 2819 | "outputPrepend", 2820 | "outputPrepend", 2821 | "outputPrepend", 2822 | "outputPrepend", 2823 | "outputPrepend", 2824 | "outputPrepend", 2825 | "outputPrepend", 2826 | "outputPrepend", 2827 | "outputPrepend", 2828 | "outputPrepend", 2829 | "outputPrepend", 2830 | "outputPrepend", 2831 | "outputPrepend", 2832 | "outputPrepend", 2833 | "outputPrepend", 2834 | "outputPrepend", 2835 | "outputPrepend", 2836 | "outputPrepend", 2837 | "outputPrepend", 2838 | "outputPrepend", 2839 | "outputPrepend", 2840 | "outputPrepend", 2841 | "outputPrepend", 2842 | "outputPrepend", 2843 | "outputPrepend", 2844 | "outputPrepend", 2845 | "outputPrepend", 2846 | "outputPrepend", 2847 | "outputPrepend", 2848 | "outputPrepend", 2849 | "outputPrepend", 2850 | "outputPrepend", 2851 | "outputPrepend", 2852 | "outputPrepend", 2853 | "outputPrepend", 2854 | "outputPrepend", 2855 | "outputPrepend", 2856 | "outputPrepend", 2857 | "outputPrepend", 2858 | "outputPrepend", 2859 | "outputPrepend", 2860 | "outputPrepend", 2861 | "outputPrepend", 2862 | "outputPrepend", 2863 | "outputPrepend", 2864 | "outputPrepend", 2865 | "outputPrepend", 2866 | "outputPrepend", 2867 | "outputPrepend", 2868 | "outputPrepend", 2869 | "outputPrepend", 2870 | "outputPrepend", 2871 | "outputPrepend", 2872 | "outputPrepend", 2873 | "outputPrepend", 2874 | "outputPrepend", 2875 | "outputPrepend", 2876 | "outputPrepend", 2877 | "outputPrepend", 2878 | "outputPrepend", 2879 | "outputPrepend", 2880 | "outputPrepend", 2881 | "outputPrepend", 2882 | "outputPrepend", 2883 | "outputPrepend", 2884 | "outputPrepend", 2885 | "outputPrepend", 2886 | "outputPrepend", 2887 | "outputPrepend", 2888 | "outputPrepend", 2889 | "outputPrepend", 2890 | "outputPrepend", 2891 | "outputPrepend", 2892 | "outputPrepend", 2893 | "outputPrepend", 2894 | "outputPrepend", 2895 | "outputPrepend", 2896 | "outputPrepend", 2897 | "outputPrepend", 2898 | "outputPrepend", 2899 | "outputPrepend", 2900 | "outputPrepend", 2901 | "outputPrepend", 2902 | "outputPrepend", 2903 | "outputPrepend", 2904 | "outputPrepend", 2905 | "outputPrepend", 2906 | "outputPrepend", 2907 | "outputPrepend", 2908 | "outputPrepend", 2909 | "outputPrepend", 2910 | "outputPrepend", 2911 | "outputPrepend", 2912 | "outputPrepend", 2913 | "outputPrepend", 2914 | "outputPrepend", 2915 | "outputPrepend", 2916 | "outputPrepend", 2917 | "outputPrepend", 2918 | "outputPrepend", 2919 | "outputPrepend", 2920 | "outputPrepend", 2921 | "outputPrepend", 2922 | "outputPrepend", 2923 | "outputPrepend", 2924 | "outputPrepend", 2925 | "outputPrepend", 2926 | "outputPrepend", 2927 | "outputPrepend", 2928 | "outputPrepend", 2929 | "outputPrepend", 2930 | "outputPrepend", 2931 | "outputPrepend", 2932 | "outputPrepend", 2933 | "outputPrepend", 2934 | "outputPrepend", 2935 | "outputPrepend", 2936 | "outputPrepend", 2937 | "outputPrepend", 2938 | "outputPrepend", 2939 | "outputPrepend", 2940 | "outputPrepend", 2941 | "outputPrepend", 2942 | "outputPrepend", 2943 | "outputPrepend", 2944 | "outputPrepend", 2945 | "outputPrepend", 2946 | "outputPrepend", 2947 | "outputPrepend", 2948 | "outputPrepend", 2949 | "outputPrepend", 2950 | "outputPrepend", 2951 | "outputPrepend", 2952 | "outputPrepend", 2953 | "outputPrepend", 2954 | "outputPrepend", 2955 | "outputPrepend", 2956 | "outputPrepend", 2957 | "outputPrepend", 2958 | "outputPrepend", 2959 | "outputPrepend", 2960 | "outputPrepend", 2961 | "outputPrepend", 2962 | "outputPrepend", 2963 | "outputPrepend", 2964 | "outputPrepend", 2965 | "outputPrepend", 2966 | "outputPrepend", 2967 | "outputPrepend", 2968 | "outputPrepend", 2969 | "outputPrepend", 2970 | "outputPrepend", 2971 | "outputPrepend", 2972 | "outputPrepend", 2973 | "outputPrepend", 2974 | "outputPrepend", 2975 | "outputPrepend", 2976 | "outputPrepend", 2977 | "outputPrepend", 2978 | "outputPrepend", 2979 | "outputPrepend", 2980 | "outputPrepend", 2981 | "outputPrepend", 2982 | "outputPrepend", 2983 | "outputPrepend", 2984 | "outputPrepend", 2985 | "outputPrepend", 2986 | "outputPrepend", 2987 | "outputPrepend", 2988 | "outputPrepend", 2989 | "outputPrepend", 2990 | "outputPrepend", 2991 | "outputPrepend", 2992 | "outputPrepend", 2993 | "outputPrepend", 2994 | "outputPrepend", 2995 | "outputPrepend", 2996 | "outputPrepend", 2997 | "outputPrepend", 2998 | "outputPrepend", 2999 | "outputPrepend", 3000 | "outputPrepend", 3001 | "outputPrepend", 3002 | "outputPrepend", 3003 | "outputPrepend", 3004 | "outputPrepend", 3005 | "outputPrepend", 3006 | "outputPrepend", 3007 | "outputPrepend", 3008 | "outputPrepend", 3009 | "outputPrepend", 3010 | "outputPrepend", 3011 | "outputPrepend", 3012 | "outputPrepend", 3013 | "outputPrepend", 3014 | "outputPrepend", 3015 | "outputPrepend", 3016 | "outputPrepend", 3017 | "outputPrepend", 3018 | "outputPrepend", 3019 | "outputPrepend", 3020 | "outputPrepend", 3021 | "outputPrepend", 3022 | "outputPrepend", 3023 | "outputPrepend", 3024 | "outputPrepend", 3025 | "outputPrepend", 3026 | "outputPrepend", 3027 | "outputPrepend", 3028 | "outputPrepend", 3029 | "outputPrepend", 3030 | "outputPrepend", 3031 | "outputPrepend", 3032 | "outputPrepend", 3033 | "outputPrepend", 3034 | "outputPrepend", 3035 | "outputPrepend", 3036 | "outputPrepend", 3037 | "outputPrepend", 3038 | "outputPrepend", 3039 | "outputPrepend", 3040 | "outputPrepend", 3041 | "outputPrepend", 3042 | "outputPrepend", 3043 | "outputPrepend", 3044 | "outputPrepend", 3045 | "outputPrepend", 3046 | "outputPrepend", 3047 | "outputPrepend", 3048 | "outputPrepend", 3049 | "outputPrepend", 3050 | "outputPrepend", 3051 | "outputPrepend", 3052 | "outputPrepend", 3053 | "outputPrepend", 3054 | "outputPrepend", 3055 | "outputPrepend", 3056 | "outputPrepend", 3057 | "outputPrepend", 3058 | "outputPrepend", 3059 | "outputPrepend", 3060 | "outputPrepend", 3061 | "outputPrepend", 3062 | "outputPrepend", 3063 | "outputPrepend", 3064 | "outputPrepend", 3065 | "outputPrepend", 3066 | "outputPrepend", 3067 | "outputPrepend", 3068 | "outputPrepend", 3069 | "outputPrepend", 3070 | "outputPrepend", 3071 | "outputPrepend", 3072 | "outputPrepend", 3073 | "outputPrepend", 3074 | "outputPrepend", 3075 | "outputPrepend", 3076 | "outputPrepend", 3077 | "outputPrepend", 3078 | "outputPrepend", 3079 | "outputPrepend", 3080 | "outputPrepend", 3081 | "outputPrepend", 3082 | "outputPrepend", 3083 | "outputPrepend", 3084 | "outputPrepend", 3085 | "outputPrepend", 3086 | "outputPrepend", 3087 | "outputPrepend", 3088 | "outputPrepend", 3089 | "outputPrepend", 3090 | "outputPrepend", 3091 | "outputPrepend", 3092 | "outputPrepend", 3093 | "outputPrepend", 3094 | "outputPrepend", 3095 | "outputPrepend", 3096 | "outputPrepend", 3097 | "outputPrepend", 3098 | "outputPrepend", 3099 | "outputPrepend", 3100 | "outputPrepend", 3101 | "outputPrepend", 3102 | "outputPrepend", 3103 | "outputPrepend", 3104 | "outputPrepend", 3105 | "outputPrepend", 3106 | "outputPrepend", 3107 | "outputPrepend", 3108 | "outputPrepend", 3109 | "outputPrepend", 3110 | "outputPrepend", 3111 | "outputPrepend", 3112 | "outputPrepend", 3113 | "outputPrepend", 3114 | "outputPrepend", 3115 | "outputPrepend", 3116 | "outputPrepend", 3117 | "outputPrepend", 3118 | "outputPrepend", 3119 | "outputPrepend", 3120 | "outputPrepend", 3121 | "outputPrepend", 3122 | "outputPrepend", 3123 | "outputPrepend", 3124 | "outputPrepend", 3125 | "outputPrepend", 3126 | "outputPrepend", 3127 | "outputPrepend", 3128 | "outputPrepend", 3129 | "outputPrepend", 3130 | "outputPrepend", 3131 | "outputPrepend", 3132 | "outputPrepend", 3133 | "outputPrepend", 3134 | "outputPrepend", 3135 | "outputPrepend", 3136 | "outputPrepend", 3137 | "outputPrepend", 3138 | "outputPrepend", 3139 | "outputPrepend", 3140 | "outputPrepend", 3141 | "outputPrepend", 3142 | "outputPrepend", 3143 | "outputPrepend", 3144 | "outputPrepend", 3145 | "outputPrepend", 3146 | "outputPrepend", 3147 | "outputPrepend", 3148 | "outputPrepend", 3149 | "outputPrepend", 3150 | "outputPrepend", 3151 | "outputPrepend", 3152 | "outputPrepend", 3153 | "outputPrepend", 3154 | "outputPrepend", 3155 | "outputPrepend", 3156 | "outputPrepend", 3157 | "outputPrepend", 3158 | "outputPrepend", 3159 | "outputPrepend", 3160 | "outputPrepend", 3161 | "outputPrepend", 3162 | "outputPrepend", 3163 | "outputPrepend", 3164 | "outputPrepend", 3165 | "outputPrepend", 3166 | "outputPrepend", 3167 | "outputPrepend", 3168 | "outputPrepend", 3169 | "outputPrepend", 3170 | "outputPrepend", 3171 | "outputPrepend", 3172 | "outputPrepend", 3173 | "outputPrepend", 3174 | "outputPrepend", 3175 | "outputPrepend", 3176 | "outputPrepend", 3177 | "outputPrepend", 3178 | "outputPrepend", 3179 | "outputPrepend", 3180 | "outputPrepend", 3181 | "outputPrepend", 3182 | "outputPrepend", 3183 | "outputPrepend", 3184 | "outputPrepend", 3185 | "outputPrepend", 3186 | "outputPrepend", 3187 | "outputPrepend", 3188 | "outputPrepend", 3189 | "outputPrepend", 3190 | "outputPrepend", 3191 | "outputPrepend", 3192 | "outputPrepend", 3193 | "outputPrepend", 3194 | "outputPrepend", 3195 | "outputPrepend", 3196 | "outputPrepend", 3197 | "outputPrepend", 3198 | "outputPrepend", 3199 | "outputPrepend", 3200 | "outputPrepend", 3201 | "outputPrepend", 3202 | "outputPrepend", 3203 | "outputPrepend", 3204 | "outputPrepend", 3205 | "outputPrepend", 3206 | "outputPrepend", 3207 | "outputPrepend", 3208 | "outputPrepend", 3209 | "outputPrepend", 3210 | "outputPrepend", 3211 | "outputPrepend", 3212 | "outputPrepend", 3213 | "outputPrepend", 3214 | "outputPrepend", 3215 | "outputPrepend", 3216 | "outputPrepend", 3217 | "outputPrepend", 3218 | "outputPrepend", 3219 | "outputPrepend", 3220 | "outputPrepend", 3221 | "outputPrepend", 3222 | "outputPrepend", 3223 | "outputPrepend", 3224 | "outputPrepend", 3225 | "outputPrepend", 3226 | "outputPrepend", 3227 | "outputPrepend", 3228 | "outputPrepend", 3229 | "outputPrepend", 3230 | "outputPrepend", 3231 | "outputPrepend", 3232 | "outputPrepend", 3233 | "outputPrepend", 3234 | "outputPrepend", 3235 | "outputPrepend", 3236 | "outputPrepend", 3237 | "outputPrepend", 3238 | "outputPrepend", 3239 | "outputPrepend", 3240 | "outputPrepend", 3241 | "outputPrepend", 3242 | "outputPrepend", 3243 | "outputPrepend", 3244 | "outputPrepend", 3245 | "outputPrepend", 3246 | "outputPrepend", 3247 | "outputPrepend", 3248 | "outputPrepend", 3249 | "outputPrepend", 3250 | "outputPrepend", 3251 | "outputPrepend", 3252 | "outputPrepend", 3253 | "outputPrepend", 3254 | "outputPrepend", 3255 | "outputPrepend", 3256 | "outputPrepend", 3257 | "outputPrepend", 3258 | "outputPrepend", 3259 | "outputPrepend", 3260 | "outputPrepend", 3261 | "outputPrepend", 3262 | "outputPrepend", 3263 | "outputPrepend", 3264 | "outputPrepend", 3265 | "outputPrepend", 3266 | "outputPrepend", 3267 | "outputPrepend", 3268 | "outputPrepend", 3269 | "outputPrepend", 3270 | "outputPrepend", 3271 | "outputPrepend", 3272 | "outputPrepend", 3273 | "outputPrepend", 3274 | "outputPrepend", 3275 | "outputPrepend", 3276 | "outputPrepend", 3277 | "outputPrepend", 3278 | "outputPrepend", 3279 | "outputPrepend", 3280 | "outputPrepend", 3281 | "outputPrepend", 3282 | "outputPrepend", 3283 | "outputPrepend", 3284 | "outputPrepend", 3285 | "outputPrepend", 3286 | "outputPrepend", 3287 | "outputPrepend", 3288 | "outputPrepend", 3289 | "outputPrepend", 3290 | "outputPrepend", 3291 | "outputPrepend", 3292 | "outputPrepend", 3293 | "outputPrepend", 3294 | "outputPrepend", 3295 | "outputPrepend", 3296 | "outputPrepend", 3297 | "outputPrepend", 3298 | "outputPrepend", 3299 | "outputPrepend", 3300 | "outputPrepend", 3301 | "outputPrepend", 3302 | "outputPrepend", 3303 | "outputPrepend", 3304 | "outputPrepend", 3305 | "outputPrepend", 3306 | "outputPrepend", 3307 | "outputPrepend", 3308 | "outputPrepend", 3309 | "outputPrepend", 3310 | "outputPrepend", 3311 | "outputPrepend", 3312 | "outputPrepend", 3313 | "outputPrepend", 3314 | "outputPrepend", 3315 | "outputPrepend", 3316 | "outputPrepend", 3317 | "outputPrepend", 3318 | "outputPrepend", 3319 | "outputPrepend", 3320 | "outputPrepend", 3321 | "outputPrepend", 3322 | "outputPrepend", 3323 | "outputPrepend", 3324 | "outputPrepend", 3325 | "outputPrepend", 3326 | "outputPrepend", 3327 | "outputPrepend", 3328 | "outputPrepend", 3329 | "outputPrepend", 3330 | "outputPrepend", 3331 | "outputPrepend", 3332 | "outputPrepend", 3333 | "outputPrepend", 3334 | "outputPrepend", 3335 | "outputPrepend", 3336 | "outputPrepend", 3337 | "outputPrepend", 3338 | "outputPrepend", 3339 | "outputPrepend", 3340 | "outputPrepend", 3341 | "outputPrepend", 3342 | "outputPrepend", 3343 | "outputPrepend", 3344 | "outputPrepend", 3345 | "outputPrepend", 3346 | "outputPrepend", 3347 | "outputPrepend", 3348 | "outputPrepend", 3349 | "outputPrepend", 3350 | "outputPrepend", 3351 | "outputPrepend", 3352 | "outputPrepend", 3353 | "outputPrepend", 3354 | "outputPrepend", 3355 | "outputPrepend", 3356 | "outputPrepend", 3357 | "outputPrepend", 3358 | "outputPrepend", 3359 | "outputPrepend", 3360 | "outputPrepend", 3361 | "outputPrepend", 3362 | "outputPrepend", 3363 | "outputPrepend", 3364 | "outputPrepend", 3365 | "outputPrepend", 3366 | "outputPrepend", 3367 | "outputPrepend", 3368 | "outputPrepend", 3369 | "outputPrepend", 3370 | "outputPrepend", 3371 | "outputPrepend", 3372 | "outputPrepend", 3373 | "outputPrepend", 3374 | "outputPrepend", 3375 | "outputPrepend", 3376 | "outputPrepend", 3377 | "outputPrepend", 3378 | "outputPrepend", 3379 | "outputPrepend", 3380 | "outputPrepend", 3381 | "outputPrepend", 3382 | "outputPrepend", 3383 | "outputPrepend", 3384 | "outputPrepend", 3385 | "outputPrepend", 3386 | "outputPrepend", 3387 | "outputPrepend", 3388 | "outputPrepend", 3389 | "outputPrepend", 3390 | "outputPrepend", 3391 | "outputPrepend", 3392 | "outputPrepend", 3393 | "outputPrepend", 3394 | "outputPrepend", 3395 | "outputPrepend", 3396 | "outputPrepend", 3397 | "outputPrepend", 3398 | "outputPrepend", 3399 | "outputPrepend", 3400 | "outputPrepend", 3401 | "outputPrepend", 3402 | "outputPrepend", 3403 | "outputPrepend", 3404 | "outputPrepend", 3405 | "outputPrepend", 3406 | "outputPrepend", 3407 | "outputPrepend", 3408 | "outputPrepend", 3409 | "outputPrepend", 3410 | "outputPrepend", 3411 | "outputPrepend", 3412 | "outputPrepend", 3413 | "outputPrepend", 3414 | "outputPrepend", 3415 | "outputPrepend", 3416 | "outputPrepend", 3417 | "outputPrepend", 3418 | "outputPrepend", 3419 | "outputPrepend", 3420 | "outputPrepend", 3421 | "outputPrepend", 3422 | "outputPrepend", 3423 | "outputPrepend", 3424 | "outputPrepend", 3425 | "outputPrepend", 3426 | "outputPrepend", 3427 | "outputPrepend", 3428 | "outputPrepend", 3429 | "outputPrepend", 3430 | "outputPrepend", 3431 | "outputPrepend", 3432 | "outputPrepend", 3433 | "outputPrepend", 3434 | "outputPrepend", 3435 | "outputPrepend", 3436 | "outputPrepend", 3437 | "outputPrepend", 3438 | "outputPrepend", 3439 | "outputPrepend", 3440 | "outputPrepend", 3441 | "outputPrepend", 3442 | "outputPrepend", 3443 | "outputPrepend", 3444 | "outputPrepend", 3445 | "outputPrepend", 3446 | "outputPrepend", 3447 | "outputPrepend", 3448 | "outputPrepend", 3449 | "outputPrepend", 3450 | "outputPrepend", 3451 | "outputPrepend", 3452 | "outputPrepend", 3453 | "outputPrepend", 3454 | "outputPrepend", 3455 | "outputPrepend", 3456 | "outputPrepend", 3457 | "outputPrepend", 3458 | "outputPrepend", 3459 | "outputPrepend", 3460 | "outputPrepend", 3461 | "outputPrepend", 3462 | "outputPrepend", 3463 | "outputPrepend", 3464 | "outputPrepend", 3465 | "outputPrepend", 3466 | "outputPrepend", 3467 | "outputPrepend", 3468 | "outputPrepend", 3469 | "outputPrepend", 3470 | "outputPrepend", 3471 | "outputPrepend", 3472 | "outputPrepend", 3473 | "outputPrepend", 3474 | "outputPrepend", 3475 | "outputPrepend", 3476 | "outputPrepend", 3477 | "outputPrepend", 3478 | "outputPrepend", 3479 | "outputPrepend", 3480 | "outputPrepend", 3481 | "outputPrepend", 3482 | "outputPrepend", 3483 | "outputPrepend", 3484 | "outputPrepend", 3485 | "outputPrepend", 3486 | "outputPrepend", 3487 | "outputPrepend", 3488 | "outputPrepend", 3489 | "outputPrepend", 3490 | "outputPrepend", 3491 | "outputPrepend", 3492 | "outputPrepend", 3493 | "outputPrepend", 3494 | "outputPrepend", 3495 | "outputPrepend", 3496 | "outputPrepend", 3497 | "outputPrepend", 3498 | "outputPrepend", 3499 | "outputPrepend", 3500 | "outputPrepend", 3501 | "outputPrepend", 3502 | "outputPrepend", 3503 | "outputPrepend", 3504 | "outputPrepend", 3505 | "outputPrepend", 3506 | "outputPrepend", 3507 | "outputPrepend", 3508 | "outputPrepend", 3509 | "outputPrepend", 3510 | "outputPrepend", 3511 | "outputPrepend", 3512 | "outputPrepend", 3513 | "outputPrepend", 3514 | "outputPrepend", 3515 | "outputPrepend", 3516 | "outputPrepend", 3517 | "outputPrepend", 3518 | "outputPrepend", 3519 | "outputPrepend", 3520 | "outputPrepend", 3521 | "outputPrepend", 3522 | "outputPrepend", 3523 | "outputPrepend", 3524 | "outputPrepend", 3525 | "outputPrepend", 3526 | "outputPrepend", 3527 | "outputPrepend", 3528 | "outputPrepend", 3529 | "outputPrepend", 3530 | "outputPrepend", 3531 | "outputPrepend", 3532 | "outputPrepend", 3533 | "outputPrepend", 3534 | "outputPrepend", 3535 | "outputPrepend", 3536 | "outputPrepend", 3537 | "outputPrepend", 3538 | "outputPrepend", 3539 | "outputPrepend", 3540 | "outputPrepend", 3541 | "outputPrepend", 3542 | "outputPrepend", 3543 | "outputPrepend", 3544 | "outputPrepend", 3545 | "outputPrepend", 3546 | "outputPrepend", 3547 | "outputPrepend", 3548 | "outputPrepend", 3549 | "outputPrepend", 3550 | "outputPrepend", 3551 | "outputPrepend", 3552 | "outputPrepend", 3553 | "outputPrepend", 3554 | "outputPrepend", 3555 | "outputPrepend", 3556 | "outputPrepend", 3557 | "outputPrepend", 3558 | "outputPrepend", 3559 | "outputPrepend", 3560 | "outputPrepend", 3561 | "outputPrepend", 3562 | "outputPrepend", 3563 | "outputPrepend", 3564 | "outputPrepend", 3565 | "outputPrepend", 3566 | "outputPrepend", 3567 | "outputPrepend", 3568 | "outputPrepend", 3569 | "outputPrepend", 3570 | "outputPrepend", 3571 | "outputPrepend", 3572 | "outputPrepend", 3573 | "outputPrepend", 3574 | "outputPrepend", 3575 | "outputPrepend", 3576 | "outputPrepend", 3577 | "outputPrepend", 3578 | "outputPrepend", 3579 | "outputPrepend", 3580 | "outputPrepend", 3581 | "outputPrepend", 3582 | "outputPrepend", 3583 | "outputPrepend", 3584 | "outputPrepend", 3585 | "outputPrepend", 3586 | "outputPrepend", 3587 | "outputPrepend", 3588 | "outputPrepend", 3589 | "outputPrepend", 3590 | "outputPrepend", 3591 | "outputPrepend", 3592 | "outputPrepend", 3593 | "outputPrepend", 3594 | "outputPrepend", 3595 | "outputPrepend", 3596 | "outputPrepend", 3597 | "outputPrepend", 3598 | "outputPrepend", 3599 | "outputPrepend", 3600 | "outputPrepend", 3601 | "outputPrepend", 3602 | "outputPrepend", 3603 | "outputPrepend", 3604 | "outputPrepend", 3605 | "outputPrepend", 3606 | "outputPrepend", 3607 | "outputPrepend", 3608 | "outputPrepend", 3609 | "outputPrepend", 3610 | "outputPrepend", 3611 | "outputPrepend", 3612 | "outputPrepend", 3613 | "outputPrepend", 3614 | "outputPrepend", 3615 | "outputPrepend", 3616 | "outputPrepend", 3617 | "outputPrepend", 3618 | "outputPrepend", 3619 | "outputPrepend", 3620 | "outputPrepend", 3621 | "outputPrepend", 3622 | "outputPrepend", 3623 | "outputPrepend", 3624 | "outputPrepend", 3625 | "outputPrepend", 3626 | "outputPrepend", 3627 | "outputPrepend", 3628 | "outputPrepend", 3629 | "outputPrepend", 3630 | "outputPrepend", 3631 | "outputPrepend", 3632 | "outputPrepend", 3633 | "outputPrepend", 3634 | "outputPrepend", 3635 | "outputPrepend", 3636 | "outputPrepend", 3637 | "outputPrepend", 3638 | "outputPrepend", 3639 | "outputPrepend", 3640 | "outputPrepend", 3641 | "outputPrepend", 3642 | "outputPrepend", 3643 | "outputPrepend", 3644 | "outputPrepend", 3645 | "outputPrepend", 3646 | "outputPrepend", 3647 | "outputPrepend", 3648 | "outputPrepend", 3649 | "outputPrepend", 3650 | "outputPrepend", 3651 | "outputPrepend", 3652 | "outputPrepend", 3653 | "outputPrepend", 3654 | "outputPrepend", 3655 | "outputPrepend", 3656 | "outputPrepend", 3657 | "outputPrepend", 3658 | "outputPrepend", 3659 | "outputPrepend", 3660 | "outputPrepend", 3661 | "outputPrepend", 3662 | "outputPrepend", 3663 | "outputPrepend", 3664 | "outputPrepend", 3665 | "outputPrepend", 3666 | "outputPrepend", 3667 | "outputPrepend", 3668 | "outputPrepend", 3669 | "outputPrepend", 3670 | "outputPrepend", 3671 | "outputPrepend", 3672 | "outputPrepend", 3673 | "outputPrepend", 3674 | "outputPrepend", 3675 | "outputPrepend", 3676 | "outputPrepend", 3677 | "outputPrepend", 3678 | "outputPrepend", 3679 | "outputPrepend", 3680 | "outputPrepend", 3681 | "outputPrepend", 3682 | "outputPrepend", 3683 | "outputPrepend", 3684 | "outputPrepend", 3685 | "outputPrepend", 3686 | "outputPrepend", 3687 | "outputPrepend", 3688 | "outputPrepend", 3689 | "outputPrepend", 3690 | "outputPrepend", 3691 | "outputPrepend", 3692 | "outputPrepend", 3693 | "outputPrepend", 3694 | "outputPrepend", 3695 | "outputPrepend", 3696 | "outputPrepend", 3697 | "outputPrepend", 3698 | "outputPrepend", 3699 | "outputPrepend", 3700 | "outputPrepend", 3701 | "outputPrepend", 3702 | "outputPrepend", 3703 | "outputPrepend", 3704 | "outputPrepend", 3705 | "outputPrepend", 3706 | "outputPrepend", 3707 | "outputPrepend", 3708 | "outputPrepend", 3709 | "outputPrepend", 3710 | "outputPrepend", 3711 | "outputPrepend", 3712 | "outputPrepend", 3713 | "outputPrepend", 3714 | "outputPrepend", 3715 | "outputPrepend", 3716 | "outputPrepend", 3717 | "outputPrepend", 3718 | "outputPrepend", 3719 | "outputPrepend", 3720 | "outputPrepend", 3721 | "outputPrepend", 3722 | "outputPrepend", 3723 | "outputPrepend", 3724 | "outputPrepend", 3725 | "outputPrepend", 3726 | "outputPrepend", 3727 | "outputPrepend", 3728 | "outputPrepend", 3729 | "outputPrepend", 3730 | "outputPrepend", 3731 | "outputPrepend", 3732 | "outputPrepend", 3733 | "outputPrepend", 3734 | "outputPrepend", 3735 | "outputPrepend", 3736 | "outputPrepend", 3737 | "outputPrepend", 3738 | "outputPrepend", 3739 | "outputPrepend", 3740 | "outputPrepend", 3741 | "outputPrepend", 3742 | "outputPrepend", 3743 | "outputPrepend", 3744 | "outputPrepend", 3745 | "outputPrepend", 3746 | "outputPrepend", 3747 | "outputPrepend", 3748 | "outputPrepend", 3749 | "outputPrepend", 3750 | "outputPrepend", 3751 | "outputPrepend", 3752 | "outputPrepend", 3753 | "outputPrepend", 3754 | "outputPrepend", 3755 | "outputPrepend", 3756 | "outputPrepend", 3757 | "outputPrepend", 3758 | "outputPrepend", 3759 | "outputPrepend", 3760 | "outputPrepend", 3761 | "outputPrepend", 3762 | "outputPrepend", 3763 | "outputPrepend", 3764 | "outputPrepend", 3765 | "outputPrepend", 3766 | "outputPrepend", 3767 | "outputPrepend", 3768 | "outputPrepend", 3769 | "outputPrepend", 3770 | "outputPrepend", 3771 | "outputPrepend", 3772 | "outputPrepend", 3773 | "outputPrepend", 3774 | "outputPrepend", 3775 | "outputPrepend", 3776 | "outputPrepend", 3777 | "outputPrepend", 3778 | "outputPrepend", 3779 | "outputPrepend", 3780 | "outputPrepend", 3781 | "outputPrepend", 3782 | "outputPrepend", 3783 | "outputPrepend", 3784 | "outputPrepend", 3785 | "outputPrepend", 3786 | "outputPrepend", 3787 | "outputPrepend", 3788 | "outputPrepend", 3789 | "outputPrepend", 3790 | "outputPrepend", 3791 | "outputPrepend", 3792 | "outputPrepend", 3793 | "outputPrepend", 3794 | "outputPrepend", 3795 | "outputPrepend", 3796 | "outputPrepend", 3797 | "outputPrepend", 3798 | "outputPrepend", 3799 | "outputPrepend", 3800 | "outputPrepend", 3801 | "outputPrepend", 3802 | "outputPrepend", 3803 | "outputPrepend", 3804 | "outputPrepend", 3805 | "outputPrepend", 3806 | "outputPrepend", 3807 | "outputPrepend", 3808 | "outputPrepend", 3809 | "outputPrepend", 3810 | "outputPrepend", 3811 | "outputPrepend", 3812 | "outputPrepend", 3813 | "outputPrepend", 3814 | "outputPrepend", 3815 | "outputPrepend", 3816 | "outputPrepend", 3817 | "outputPrepend", 3818 | "outputPrepend", 3819 | "outputPrepend", 3820 | "outputPrepend", 3821 | "outputPrepend", 3822 | "outputPrepend", 3823 | "outputPrepend", 3824 | "outputPrepend", 3825 | "outputPrepend", 3826 | "outputPrepend", 3827 | "outputPrepend", 3828 | "outputPrepend", 3829 | "outputPrepend", 3830 | "outputPrepend", 3831 | "outputPrepend", 3832 | "outputPrepend", 3833 | "outputPrepend", 3834 | "outputPrepend", 3835 | "outputPrepend", 3836 | "outputPrepend", 3837 | "outputPrepend", 3838 | "outputPrepend", 3839 | "outputPrepend", 3840 | "outputPrepend", 3841 | "outputPrepend", 3842 | "outputPrepend", 3843 | "outputPrepend", 3844 | "outputPrepend", 3845 | "outputPrepend", 3846 | "outputPrepend", 3847 | "outputPrepend", 3848 | "outputPrepend", 3849 | "outputPrepend", 3850 | "outputPrepend", 3851 | "outputPrepend", 3852 | "outputPrepend", 3853 | "outputPrepend", 3854 | "outputPrepend", 3855 | "outputPrepend", 3856 | "outputPrepend", 3857 | "outputPrepend", 3858 | "outputPrepend", 3859 | "outputPrepend", 3860 | "outputPrepend", 3861 | "outputPrepend", 3862 | "outputPrepend", 3863 | "outputPrepend", 3864 | "outputPrepend", 3865 | "outputPrepend", 3866 | "outputPrepend", 3867 | "outputPrepend", 3868 | "outputPrepend", 3869 | "outputPrepend", 3870 | "outputPrepend", 3871 | "outputPrepend", 3872 | "outputPrepend", 3873 | "outputPrepend", 3874 | "outputPrepend", 3875 | "outputPrepend", 3876 | "outputPrepend", 3877 | "outputPrepend", 3878 | "outputPrepend", 3879 | "outputPrepend", 3880 | "outputPrepend", 3881 | "outputPrepend", 3882 | "outputPrepend", 3883 | "outputPrepend", 3884 | "outputPrepend", 3885 | "outputPrepend", 3886 | "outputPrepend", 3887 | "outputPrepend", 3888 | "outputPrepend", 3889 | "outputPrepend", 3890 | "outputPrepend", 3891 | "outputPrepend", 3892 | "outputPrepend", 3893 | "outputPrepend", 3894 | "outputPrepend", 3895 | "outputPrepend", 3896 | "outputPrepend", 3897 | "outputPrepend", 3898 | "outputPrepend", 3899 | "outputPrepend", 3900 | "outputPrepend", 3901 | "outputPrepend", 3902 | "outputPrepend", 3903 | "outputPrepend", 3904 | "outputPrepend", 3905 | "outputPrepend", 3906 | "outputPrepend", 3907 | "outputPrepend", 3908 | "outputPrepend", 3909 | "outputPrepend", 3910 | "outputPrepend", 3911 | "outputPrepend", 3912 | "outputPrepend", 3913 | "outputPrepend", 3914 | "outputPrepend", 3915 | "outputPrepend", 3916 | "outputPrepend", 3917 | "outputPrepend", 3918 | "outputPrepend", 3919 | "outputPrepend", 3920 | "outputPrepend", 3921 | "outputPrepend", 3922 | "outputPrepend", 3923 | "outputPrepend", 3924 | "outputPrepend", 3925 | "outputPrepend", 3926 | "outputPrepend", 3927 | "outputPrepend", 3928 | "outputPrepend", 3929 | "outputPrepend", 3930 | "outputPrepend", 3931 | "outputPrepend", 3932 | "outputPrepend", 3933 | "outputPrepend", 3934 | "outputPrepend", 3935 | "outputPrepend", 3936 | "outputPrepend", 3937 | "outputPrepend", 3938 | "outputPrepend", 3939 | "outputPrepend", 3940 | "outputPrepend", 3941 | "outputPrepend", 3942 | "outputPrepend", 3943 | "outputPrepend", 3944 | "outputPrepend", 3945 | "outputPrepend", 3946 | "outputPrepend", 3947 | "outputPrepend", 3948 | "outputPrepend", 3949 | "outputPrepend", 3950 | "outputPrepend", 3951 | "outputPrepend", 3952 | "outputPrepend", 3953 | "outputPrepend", 3954 | "outputPrepend", 3955 | "outputPrepend", 3956 | "outputPrepend", 3957 | "outputPrepend", 3958 | "outputPrepend", 3959 | "outputPrepend", 3960 | "outputPrepend", 3961 | "outputPrepend", 3962 | "outputPrepend", 3963 | "outputPrepend", 3964 | "outputPrepend", 3965 | "outputPrepend", 3966 | "outputPrepend", 3967 | "outputPrepend", 3968 | "outputPrepend", 3969 | "outputPrepend", 3970 | "outputPrepend", 3971 | "outputPrepend", 3972 | "outputPrepend", 3973 | "outputPrepend", 3974 | "outputPrepend", 3975 | "outputPrepend", 3976 | "outputPrepend", 3977 | "outputPrepend", 3978 | "outputPrepend", 3979 | "outputPrepend", 3980 | "outputPrepend", 3981 | "outputPrepend", 3982 | "outputPrepend", 3983 | "outputPrepend", 3984 | "outputPrepend", 3985 | "outputPrepend", 3986 | "outputPrepend", 3987 | "outputPrepend", 3988 | "outputPrepend", 3989 | "outputPrepend", 3990 | "outputPrepend", 3991 | "outputPrepend", 3992 | "outputPrepend", 3993 | "outputPrepend", 3994 | "outputPrepend", 3995 | "outputPrepend", 3996 | "outputPrepend", 3997 | "outputPrepend", 3998 | "outputPrepend", 3999 | "outputPrepend", 4000 | "outputPrepend", 4001 | "outputPrepend", 4002 | "outputPrepend", 4003 | "outputPrepend", 4004 | "outputPrepend", 4005 | "outputPrepend", 4006 | "outputPrepend", 4007 | "outputPrepend", 4008 | "outputPrepend", 4009 | "outputPrepend", 4010 | "outputPrepend", 4011 | "outputPrepend", 4012 | "outputPrepend", 4013 | "outputPrepend", 4014 | "outputPrepend", 4015 | "outputPrepend", 4016 | "outputPrepend", 4017 | "outputPrepend", 4018 | "outputPrepend", 4019 | "outputPrepend", 4020 | "outputPrepend", 4021 | "outputPrepend", 4022 | "outputPrepend", 4023 | "outputPrepend", 4024 | "outputPrepend", 4025 | "outputPrepend", 4026 | "outputPrepend", 4027 | "outputPrepend", 4028 | "outputPrepend", 4029 | "outputPrepend", 4030 | "outputPrepend", 4031 | "outputPrepend", 4032 | "outputPrepend", 4033 | "outputPrepend", 4034 | "outputPrepend", 4035 | "outputPrepend", 4036 | "outputPrepend", 4037 | "outputPrepend", 4038 | "outputPrepend", 4039 | "outputPrepend", 4040 | "outputPrepend", 4041 | "outputPrepend", 4042 | "outputPrepend", 4043 | "outputPrepend", 4044 | "outputPrepend", 4045 | "outputPrepend", 4046 | "outputPrepend", 4047 | "outputPrepend", 4048 | "outputPrepend", 4049 | "outputPrepend", 4050 | "outputPrepend", 4051 | "outputPrepend", 4052 | "outputPrepend", 4053 | "outputPrepend", 4054 | "outputPrepend", 4055 | "outputPrepend", 4056 | "outputPrepend", 4057 | "outputPrepend", 4058 | "outputPrepend", 4059 | "outputPrepend", 4060 | "outputPrepend", 4061 | "outputPrepend", 4062 | "outputPrepend", 4063 | "outputPrepend", 4064 | "outputPrepend", 4065 | "outputPrepend", 4066 | "outputPrepend", 4067 | "outputPrepend", 4068 | "outputPrepend", 4069 | "outputPrepend", 4070 | "outputPrepend", 4071 | "outputPrepend", 4072 | "outputPrepend", 4073 | "outputPrepend", 4074 | "outputPrepend", 4075 | "outputPrepend", 4076 | "outputPrepend", 4077 | "outputPrepend", 4078 | "outputPrepend", 4079 | "outputPrepend", 4080 | "outputPrepend", 4081 | "outputPrepend", 4082 | "outputPrepend", 4083 | "outputPrepend", 4084 | "outputPrepend", 4085 | "outputPrepend", 4086 | "outputPrepend", 4087 | "outputPrepend", 4088 | "outputPrepend", 4089 | "outputPrepend", 4090 | "outputPrepend", 4091 | "outputPrepend", 4092 | "outputPrepend", 4093 | "outputPrepend", 4094 | "outputPrepend", 4095 | "outputPrepend", 4096 | "outputPrepend", 4097 | "outputPrepend", 4098 | "outputPrepend", 4099 | "outputPrepend", 4100 | "outputPrepend", 4101 | "outputPrepend", 4102 | "outputPrepend", 4103 | "outputPrepend", 4104 | "outputPrepend", 4105 | "outputPrepend", 4106 | "outputPrepend", 4107 | "outputPrepend", 4108 | "outputPrepend", 4109 | "outputPrepend", 4110 | "outputPrepend", 4111 | "outputPrepend", 4112 | "outputPrepend", 4113 | "outputPrepend", 4114 | "outputPrepend", 4115 | "outputPrepend", 4116 | "outputPrepend", 4117 | "outputPrepend", 4118 | "outputPrepend", 4119 | "outputPrepend", 4120 | "outputPrepend", 4121 | "outputPrepend", 4122 | "outputPrepend", 4123 | "outputPrepend", 4124 | "outputPrepend", 4125 | "outputPrepend", 4126 | "outputPrepend", 4127 | "outputPrepend", 4128 | "outputPrepend", 4129 | "outputPrepend", 4130 | "outputPrepend", 4131 | "outputPrepend", 4132 | "outputPrepend", 4133 | "outputPrepend", 4134 | "outputPrepend", 4135 | "outputPrepend", 4136 | "outputPrepend", 4137 | "outputPrepend", 4138 | "outputPrepend", 4139 | "outputPrepend", 4140 | "outputPrepend", 4141 | "outputPrepend", 4142 | "outputPrepend", 4143 | "outputPrepend", 4144 | "outputPrepend", 4145 | "outputPrepend", 4146 | "outputPrepend", 4147 | "outputPrepend", 4148 | "outputPrepend", 4149 | "outputPrepend", 4150 | "outputPrepend", 4151 | "outputPrepend", 4152 | "outputPrepend", 4153 | "outputPrepend", 4154 | "outputPrepend", 4155 | "outputPrepend", 4156 | "outputPrepend", 4157 | "outputPrepend", 4158 | "outputPrepend", 4159 | "outputPrepend", 4160 | "outputPrepend", 4161 | "outputPrepend", 4162 | "outputPrepend", 4163 | "outputPrepend", 4164 | "outputPrepend", 4165 | "outputPrepend", 4166 | "outputPrepend", 4167 | "outputPrepend", 4168 | "outputPrepend", 4169 | "outputPrepend", 4170 | "outputPrepend", 4171 | "outputPrepend", 4172 | "outputPrepend", 4173 | "outputPrepend", 4174 | "outputPrepend", 4175 | "outputPrepend", 4176 | "outputPrepend", 4177 | "outputPrepend", 4178 | "outputPrepend", 4179 | "outputPrepend", 4180 | "outputPrepend", 4181 | "outputPrepend", 4182 | "outputPrepend", 4183 | "outputPrepend", 4184 | "outputPrepend", 4185 | "outputPrepend", 4186 | "outputPrepend", 4187 | "outputPrepend", 4188 | "outputPrepend", 4189 | "outputPrepend", 4190 | "outputPrepend", 4191 | "outputPrepend", 4192 | "outputPrepend", 4193 | "outputPrepend", 4194 | "outputPrepend", 4195 | "outputPrepend", 4196 | "outputPrepend", 4197 | "outputPrepend", 4198 | "outputPrepend", 4199 | "outputPrepend", 4200 | "outputPrepend", 4201 | "outputPrepend", 4202 | "outputPrepend", 4203 | "outputPrepend", 4204 | "outputPrepend", 4205 | "outputPrepend", 4206 | "outputPrepend", 4207 | "outputPrepend", 4208 | "outputPrepend", 4209 | "outputPrepend", 4210 | "outputPrepend", 4211 | "outputPrepend", 4212 | "outputPrepend", 4213 | "outputPrepend", 4214 | "outputPrepend", 4215 | "outputPrepend", 4216 | "outputPrepend", 4217 | "outputPrepend", 4218 | "outputPrepend", 4219 | "outputPrepend", 4220 | "outputPrepend", 4221 | "outputPrepend", 4222 | "outputPrepend", 4223 | "outputPrepend", 4224 | "outputPrepend", 4225 | "outputPrepend", 4226 | "outputPrepend", 4227 | "outputPrepend", 4228 | "outputPrepend", 4229 | "outputPrepend", 4230 | "outputPrepend", 4231 | "outputPrepend", 4232 | "outputPrepend", 4233 | "outputPrepend", 4234 | "outputPrepend", 4235 | "outputPrepend", 4236 | "outputPrepend", 4237 | "outputPrepend", 4238 | "outputPrepend", 4239 | "outputPrepend", 4240 | "outputPrepend", 4241 | "outputPrepend", 4242 | "outputPrepend", 4243 | "outputPrepend", 4244 | "outputPrepend", 4245 | "outputPrepend", 4246 | "outputPrepend", 4247 | "outputPrepend", 4248 | "outputPrepend", 4249 | "outputPrepend", 4250 | "outputPrepend", 4251 | "outputPrepend", 4252 | "outputPrepend", 4253 | "outputPrepend", 4254 | "outputPrepend", 4255 | "outputPrepend", 4256 | "outputPrepend", 4257 | "outputPrepend", 4258 | "outputPrepend", 4259 | "outputPrepend", 4260 | "outputPrepend", 4261 | "outputPrepend", 4262 | "outputPrepend", 4263 | "outputPrepend", 4264 | "outputPrepend", 4265 | "outputPrepend", 4266 | "outputPrepend", 4267 | "outputPrepend", 4268 | "outputPrepend", 4269 | "outputPrepend", 4270 | "outputPrepend", 4271 | "outputPrepend", 4272 | "outputPrepend", 4273 | "outputPrepend", 4274 | "outputPrepend", 4275 | "outputPrepend", 4276 | "outputPrepend", 4277 | "outputPrepend", 4278 | "outputPrepend", 4279 | "outputPrepend", 4280 | "outputPrepend", 4281 | "outputPrepend", 4282 | "outputPrepend", 4283 | "outputPrepend", 4284 | "outputPrepend", 4285 | "outputPrepend", 4286 | "outputPrepend", 4287 | "outputPrepend", 4288 | "outputPrepend", 4289 | "outputPrepend", 4290 | "outputPrepend", 4291 | "outputPrepend", 4292 | "outputPrepend", 4293 | "outputPrepend", 4294 | "outputPrepend", 4295 | "outputPrepend", 4296 | "outputPrepend", 4297 | "outputPrepend", 4298 | "outputPrepend", 4299 | "outputPrepend", 4300 | "outputPrepend", 4301 | "outputPrepend", 4302 | "outputPrepend", 4303 | "outputPrepend", 4304 | "outputPrepend", 4305 | "outputPrepend", 4306 | "outputPrepend", 4307 | "outputPrepend", 4308 | "outputPrepend", 4309 | "outputPrepend", 4310 | "outputPrepend", 4311 | "outputPrepend", 4312 | "outputPrepend", 4313 | "outputPrepend", 4314 | "outputPrepend", 4315 | "outputPrepend", 4316 | "outputPrepend", 4317 | "outputPrepend", 4318 | "outputPrepend", 4319 | "outputPrepend", 4320 | "outputPrepend", 4321 | "outputPrepend", 4322 | "outputPrepend", 4323 | "outputPrepend", 4324 | "outputPrepend", 4325 | "outputPrepend", 4326 | "outputPrepend", 4327 | "outputPrepend", 4328 | "outputPrepend", 4329 | "outputPrepend", 4330 | "outputPrepend", 4331 | "outputPrepend", 4332 | "outputPrepend", 4333 | "outputPrepend", 4334 | "outputPrepend", 4335 | "outputPrepend", 4336 | "outputPrepend", 4337 | "outputPrepend", 4338 | "outputPrepend", 4339 | "outputPrepend", 4340 | "outputPrepend", 4341 | "outputPrepend", 4342 | "outputPrepend", 4343 | "outputPrepend", 4344 | "outputPrepend", 4345 | "outputPrepend", 4346 | "outputPrepend", 4347 | "outputPrepend", 4348 | "outputPrepend", 4349 | "outputPrepend", 4350 | "outputPrepend", 4351 | "outputPrepend", 4352 | "outputPrepend", 4353 | "outputPrepend", 4354 | "outputPrepend", 4355 | "outputPrepend", 4356 | "outputPrepend", 4357 | "outputPrepend", 4358 | "outputPrepend", 4359 | "outputPrepend", 4360 | "outputPrepend", 4361 | "outputPrepend", 4362 | "outputPrepend", 4363 | "outputPrepend", 4364 | "outputPrepend", 4365 | "outputPrepend", 4366 | "outputPrepend", 4367 | "outputPrepend", 4368 | "outputPrepend", 4369 | "outputPrepend", 4370 | "outputPrepend", 4371 | "outputPrepend", 4372 | "outputPrepend", 4373 | "outputPrepend", 4374 | "outputPrepend", 4375 | "outputPrepend", 4376 | "outputPrepend", 4377 | "outputPrepend", 4378 | "outputPrepend", 4379 | "outputPrepend", 4380 | "outputPrepend", 4381 | "outputPrepend", 4382 | "outputPrepend", 4383 | "outputPrepend", 4384 | "outputPrepend", 4385 | "outputPrepend", 4386 | "outputPrepend", 4387 | "outputPrepend", 4388 | "outputPrepend", 4389 | "outputPrepend", 4390 | "outputPrepend", 4391 | "outputPrepend", 4392 | "outputPrepend", 4393 | "outputPrepend", 4394 | "outputPrepend", 4395 | "outputPrepend", 4396 | "outputPrepend", 4397 | "outputPrepend", 4398 | "outputPrepend", 4399 | "outputPrepend", 4400 | "outputPrepend", 4401 | "outputPrepend", 4402 | "outputPrepend", 4403 | "outputPrepend", 4404 | "outputPrepend", 4405 | "outputPrepend", 4406 | "outputPrepend", 4407 | "outputPrepend", 4408 | "outputPrepend", 4409 | "outputPrepend", 4410 | "outputPrepend", 4411 | "outputPrepend", 4412 | "outputPrepend", 4413 | "outputPrepend", 4414 | "outputPrepend", 4415 | "outputPrepend", 4416 | "outputPrepend", 4417 | "outputPrepend", 4418 | "outputPrepend", 4419 | "outputPrepend", 4420 | "outputPrepend", 4421 | "outputPrepend", 4422 | "outputPrepend", 4423 | "outputPrepend", 4424 | "outputPrepend", 4425 | "outputPrepend", 4426 | "outputPrepend", 4427 | "outputPrepend", 4428 | "outputPrepend", 4429 | "outputPrepend", 4430 | "outputPrepend", 4431 | "outputPrepend", 4432 | "outputPrepend", 4433 | "outputPrepend", 4434 | "outputPrepend", 4435 | "outputPrepend", 4436 | "outputPrepend", 4437 | "outputPrepend", 4438 | "outputPrepend", 4439 | "outputPrepend", 4440 | "outputPrepend", 4441 | "outputPrepend", 4442 | "outputPrepend", 4443 | "outputPrepend", 4444 | "outputPrepend", 4445 | "outputPrepend", 4446 | "outputPrepend", 4447 | "outputPrepend", 4448 | "outputPrepend", 4449 | "outputPrepend", 4450 | "outputPrepend", 4451 | "outputPrepend", 4452 | "outputPrepend", 4453 | "outputPrepend", 4454 | "outputPrepend", 4455 | "outputPrepend", 4456 | "outputPrepend", 4457 | "outputPrepend", 4458 | "outputPrepend", 4459 | "outputPrepend", 4460 | "outputPrepend", 4461 | "outputPrepend", 4462 | "outputPrepend", 4463 | "outputPrepend", 4464 | "outputPrepend", 4465 | "outputPrepend", 4466 | "outputPrepend", 4467 | "outputPrepend", 4468 | "outputPrepend", 4469 | "outputPrepend", 4470 | "outputPrepend", 4471 | "outputPrepend", 4472 | "outputPrepend", 4473 | "outputPrepend", 4474 | "outputPrepend", 4475 | "outputPrepend", 4476 | "outputPrepend", 4477 | "outputPrepend", 4478 | "outputPrepend", 4479 | "outputPrepend", 4480 | "outputPrepend", 4481 | "outputPrepend", 4482 | "outputPrepend", 4483 | "outputPrepend", 4484 | "outputPrepend", 4485 | "outputPrepend", 4486 | "outputPrepend", 4487 | "outputPrepend", 4488 | "outputPrepend", 4489 | "outputPrepend", 4490 | "outputPrepend", 4491 | "outputPrepend", 4492 | "outputPrepend", 4493 | "outputPrepend", 4494 | "outputPrepend", 4495 | "outputPrepend", 4496 | "outputPrepend", 4497 | "outputPrepend", 4498 | "outputPrepend", 4499 | "outputPrepend", 4500 | "outputPrepend", 4501 | "outputPrepend", 4502 | "outputPrepend", 4503 | "outputPrepend", 4504 | "outputPrepend", 4505 | "outputPrepend", 4506 | "outputPrepend", 4507 | "outputPrepend", 4508 | "outputPrepend", 4509 | "outputPrepend", 4510 | "outputPrepend", 4511 | "outputPrepend", 4512 | "outputPrepend", 4513 | "outputPrepend", 4514 | "outputPrepend", 4515 | "outputPrepend", 4516 | "outputPrepend", 4517 | "outputPrepend", 4518 | "outputPrepend", 4519 | "outputPrepend", 4520 | "outputPrepend", 4521 | "outputPrepend", 4522 | "outputPrepend", 4523 | "outputPrepend", 4524 | "outputPrepend", 4525 | "outputPrepend", 4526 | "outputPrepend", 4527 | "outputPrepend", 4528 | "outputPrepend", 4529 | "outputPrepend", 4530 | "outputPrepend", 4531 | "outputPrepend", 4532 | "outputPrepend", 4533 | "outputPrepend", 4534 | "outputPrepend", 4535 | "outputPrepend", 4536 | "outputPrepend", 4537 | "outputPrepend", 4538 | "outputPrepend", 4539 | "outputPrepend", 4540 | "outputPrepend", 4541 | "outputPrepend", 4542 | "outputPrepend", 4543 | "outputPrepend", 4544 | "outputPrepend", 4545 | "outputPrepend", 4546 | "outputPrepend", 4547 | "outputPrepend", 4548 | "outputPrepend", 4549 | "outputPrepend", 4550 | "outputPrepend", 4551 | "outputPrepend", 4552 | "outputPrepend", 4553 | "outputPrepend", 4554 | "outputPrepend", 4555 | "outputPrepend", 4556 | "outputPrepend", 4557 | "outputPrepend", 4558 | "outputPrepend", 4559 | "outputPrepend", 4560 | "outputPrepend", 4561 | "outputPrepend", 4562 | "outputPrepend", 4563 | "outputPrepend", 4564 | "outputPrepend", 4565 | "outputPrepend", 4566 | "outputPrepend", 4567 | "outputPrepend", 4568 | "outputPrepend", 4569 | "outputPrepend", 4570 | "outputPrepend", 4571 | "outputPrepend", 4572 | "outputPrepend", 4573 | "outputPrepend", 4574 | "outputPrepend", 4575 | "outputPrepend", 4576 | "outputPrepend", 4577 | "outputPrepend", 4578 | "outputPrepend", 4579 | "outputPrepend", 4580 | "outputPrepend", 4581 | "outputPrepend", 4582 | "outputPrepend", 4583 | "outputPrepend", 4584 | "outputPrepend", 4585 | "outputPrepend", 4586 | "outputPrepend", 4587 | "outputPrepend", 4588 | "outputPrepend", 4589 | "outputPrepend", 4590 | "outputPrepend", 4591 | "outputPrepend", 4592 | "outputPrepend", 4593 | "outputPrepend", 4594 | "outputPrepend", 4595 | "outputPrepend", 4596 | "outputPrepend", 4597 | "outputPrepend", 4598 | "outputPrepend", 4599 | "outputPrepend", 4600 | "outputPrepend", 4601 | "outputPrepend", 4602 | "outputPrepend", 4603 | "outputPrepend", 4604 | "outputPrepend", 4605 | "outputPrepend", 4606 | "outputPrepend", 4607 | "outputPrepend", 4608 | "outputPrepend", 4609 | "outputPrepend", 4610 | "outputPrepend", 4611 | "outputPrepend", 4612 | "outputPrepend", 4613 | "outputPrepend", 4614 | "outputPrepend", 4615 | "outputPrepend", 4616 | "outputPrepend", 4617 | "outputPrepend", 4618 | "outputPrepend", 4619 | "outputPrepend", 4620 | "outputPrepend", 4621 | "outputPrepend", 4622 | "outputPrepend", 4623 | "outputPrepend", 4624 | "outputPrepend", 4625 | "outputPrepend", 4626 | "outputPrepend", 4627 | "outputPrepend", 4628 | "outputPrepend", 4629 | "outputPrepend", 4630 | "outputPrepend", 4631 | "outputPrepend", 4632 | "outputPrepend", 4633 | "outputPrepend", 4634 | "outputPrepend", 4635 | "outputPrepend", 4636 | "outputPrepend", 4637 | "outputPrepend", 4638 | "outputPrepend", 4639 | "outputPrepend", 4640 | "outputPrepend", 4641 | "outputPrepend", 4642 | "outputPrepend", 4643 | "outputPrepend", 4644 | "outputPrepend", 4645 | "outputPrepend", 4646 | "outputPrepend", 4647 | "outputPrepend", 4648 | "outputPrepend", 4649 | "outputPrepend", 4650 | "outputPrepend", 4651 | "outputPrepend", 4652 | "outputPrepend", 4653 | "outputPrepend", 4654 | "outputPrepend", 4655 | "outputPrepend", 4656 | "outputPrepend", 4657 | "outputPrepend", 4658 | "outputPrepend", 4659 | "outputPrepend", 4660 | "outputPrepend", 4661 | "outputPrepend", 4662 | "outputPrepend", 4663 | "outputPrepend", 4664 | "outputPrepend", 4665 | "outputPrepend", 4666 | "outputPrepend", 4667 | "outputPrepend", 4668 | "outputPrepend", 4669 | "outputPrepend", 4670 | "outputPrepend", 4671 | "outputPrepend", 4672 | "outputPrepend", 4673 | "outputPrepend", 4674 | "outputPrepend", 4675 | "outputPrepend", 4676 | "outputPrepend", 4677 | "outputPrepend", 4678 | "outputPrepend", 4679 | "outputPrepend", 4680 | "outputPrepend", 4681 | "outputPrepend", 4682 | "outputPrepend", 4683 | "outputPrepend", 4684 | "outputPrepend", 4685 | "outputPrepend", 4686 | "outputPrepend", 4687 | "outputPrepend", 4688 | "outputPrepend", 4689 | "outputPrepend", 4690 | "outputPrepend", 4691 | "outputPrepend", 4692 | "outputPrepend", 4693 | "outputPrepend", 4694 | "outputPrepend", 4695 | "outputPrepend", 4696 | "outputPrepend", 4697 | "outputPrepend", 4698 | "outputPrepend", 4699 | "outputPrepend", 4700 | "outputPrepend", 4701 | "outputPrepend", 4702 | "outputPrepend", 4703 | "outputPrepend", 4704 | "outputPrepend", 4705 | "outputPrepend", 4706 | "outputPrepend", 4707 | "outputPrepend", 4708 | "outputPrepend", 4709 | "outputPrepend", 4710 | "outputPrepend", 4711 | "outputPrepend", 4712 | "outputPrepend", 4713 | "outputPrepend", 4714 | "outputPrepend", 4715 | "outputPrepend", 4716 | "outputPrepend", 4717 | "outputPrepend", 4718 | "outputPrepend", 4719 | "outputPrepend", 4720 | "outputPrepend", 4721 | "outputPrepend", 4722 | "outputPrepend", 4723 | "outputPrepend", 4724 | "outputPrepend", 4725 | "outputPrepend", 4726 | "outputPrepend", 4727 | "outputPrepend", 4728 | "outputPrepend", 4729 | "outputPrepend", 4730 | "outputPrepend", 4731 | "outputPrepend", 4732 | "outputPrepend", 4733 | "outputPrepend", 4734 | "outputPrepend", 4735 | "outputPrepend", 4736 | "outputPrepend", 4737 | "outputPrepend", 4738 | "outputPrepend", 4739 | "outputPrepend", 4740 | "outputPrepend", 4741 | "outputPrepend", 4742 | "outputPrepend", 4743 | "outputPrepend", 4744 | "outputPrepend", 4745 | "outputPrepend", 4746 | "outputPrepend", 4747 | "outputPrepend", 4748 | "outputPrepend", 4749 | "outputPrepend", 4750 | "outputPrepend", 4751 | "outputPrepend", 4752 | "outputPrepend", 4753 | "outputPrepend", 4754 | "outputPrepend", 4755 | "outputPrepend", 4756 | "outputPrepend", 4757 | "outputPrepend", 4758 | "outputPrepend", 4759 | "outputPrepend", 4760 | "outputPrepend", 4761 | "outputPrepend", 4762 | "outputPrepend", 4763 | "outputPrepend", 4764 | "outputPrepend", 4765 | "outputPrepend", 4766 | "outputPrepend", 4767 | "outputPrepend", 4768 | "outputPrepend", 4769 | "outputPrepend", 4770 | "outputPrepend", 4771 | "outputPrepend", 4772 | "outputPrepend", 4773 | "outputPrepend", 4774 | "outputPrepend", 4775 | "outputPrepend", 4776 | "outputPrepend", 4777 | "outputPrepend", 4778 | "outputPrepend", 4779 | "outputPrepend", 4780 | "outputPrepend", 4781 | "outputPrepend", 4782 | "outputPrepend", 4783 | "outputPrepend", 4784 | "outputPrepend", 4785 | "outputPrepend", 4786 | "outputPrepend", 4787 | "outputPrepend", 4788 | "outputPrepend", 4789 | "outputPrepend", 4790 | "outputPrepend", 4791 | "outputPrepend", 4792 | "outputPrepend", 4793 | "outputPrepend", 4794 | "outputPrepend", 4795 | "outputPrepend", 4796 | "outputPrepend", 4797 | "outputPrepend", 4798 | "outputPrepend", 4799 | "outputPrepend", 4800 | "outputPrepend", 4801 | "outputPrepend", 4802 | "outputPrepend", 4803 | "outputPrepend", 4804 | "outputPrepend", 4805 | "outputPrepend", 4806 | "outputPrepend", 4807 | "outputPrepend", 4808 | "outputPrepend", 4809 | "outputPrepend", 4810 | "outputPrepend", 4811 | "outputPrepend", 4812 | "outputPrepend", 4813 | "outputPrepend", 4814 | "outputPrepend", 4815 | "outputPrepend", 4816 | "outputPrepend", 4817 | "outputPrepend", 4818 | "outputPrepend", 4819 | "outputPrepend", 4820 | "outputPrepend", 4821 | "outputPrepend", 4822 | "outputPrepend", 4823 | "outputPrepend", 4824 | "outputPrepend", 4825 | "outputPrepend", 4826 | "outputPrepend", 4827 | "outputPrepend", 4828 | "outputPrepend", 4829 | "outputPrepend", 4830 | "outputPrepend", 4831 | "outputPrepend", 4832 | "outputPrepend", 4833 | "outputPrepend", 4834 | "outputPrepend", 4835 | "outputPrepend", 4836 | "outputPrepend", 4837 | "outputPrepend", 4838 | "outputPrepend", 4839 | "outputPrepend", 4840 | "outputPrepend", 4841 | "outputPrepend", 4842 | "outputPrepend", 4843 | "outputPrepend", 4844 | "outputPrepend", 4845 | "outputPrepend", 4846 | "outputPrepend", 4847 | "outputPrepend", 4848 | "outputPrepend", 4849 | "outputPrepend", 4850 | "outputPrepend", 4851 | "outputPrepend", 4852 | "outputPrepend", 4853 | "outputPrepend", 4854 | "outputPrepend", 4855 | "outputPrepend", 4856 | "outputPrepend", 4857 | "outputPrepend", 4858 | "outputPrepend", 4859 | "outputPrepend", 4860 | "outputPrepend", 4861 | "outputPrepend", 4862 | "outputPrepend", 4863 | "outputPrepend", 4864 | "outputPrepend", 4865 | "outputPrepend", 4866 | "outputPrepend", 4867 | "outputPrepend", 4868 | "outputPrepend", 4869 | "outputPrepend", 4870 | "outputPrepend", 4871 | "outputPrepend", 4872 | "outputPrepend", 4873 | "outputPrepend", 4874 | "outputPrepend", 4875 | "outputPrepend", 4876 | "outputPrepend", 4877 | "outputPrepend", 4878 | "outputPrepend", 4879 | "outputPrepend", 4880 | "outputPrepend", 4881 | "outputPrepend", 4882 | "outputPrepend", 4883 | "outputPrepend", 4884 | "outputPrepend", 4885 | "outputPrepend", 4886 | "outputPrepend", 4887 | "outputPrepend", 4888 | "outputPrepend", 4889 | "outputPrepend", 4890 | "outputPrepend", 4891 | "outputPrepend", 4892 | "outputPrepend", 4893 | "outputPrepend", 4894 | "outputPrepend", 4895 | "outputPrepend", 4896 | "outputPrepend", 4897 | "outputPrepend", 4898 | "outputPrepend", 4899 | "outputPrepend", 4900 | "outputPrepend", 4901 | "outputPrepend", 4902 | "outputPrepend", 4903 | "outputPrepend", 4904 | "outputPrepend", 4905 | "outputPrepend", 4906 | "outputPrepend", 4907 | "outputPrepend", 4908 | "outputPrepend", 4909 | "outputPrepend", 4910 | "outputPrepend", 4911 | "outputPrepend", 4912 | "outputPrepend", 4913 | "outputPrepend", 4914 | "outputPrepend", 4915 | "outputPrepend", 4916 | "outputPrepend", 4917 | "outputPrepend", 4918 | "outputPrepend", 4919 | "outputPrepend", 4920 | "outputPrepend", 4921 | "outputPrepend", 4922 | "outputPrepend", 4923 | "outputPrepend", 4924 | "outputPrepend", 4925 | "outputPrepend", 4926 | "outputPrepend", 4927 | "outputPrepend", 4928 | "outputPrepend", 4929 | "outputPrepend", 4930 | "outputPrepend", 4931 | "outputPrepend", 4932 | "outputPrepend", 4933 | "outputPrepend", 4934 | "outputPrepend", 4935 | "outputPrepend", 4936 | "outputPrepend", 4937 | "outputPrepend", 4938 | "outputPrepend", 4939 | "outputPrepend", 4940 | "outputPrepend", 4941 | "outputPrepend", 4942 | "outputPrepend", 4943 | "outputPrepend", 4944 | "outputPrepend", 4945 | "outputPrepend", 4946 | "outputPrepend", 4947 | "outputPrepend", 4948 | "outputPrepend", 4949 | "outputPrepend", 4950 | "outputPrepend", 4951 | "outputPrepend", 4952 | "outputPrepend", 4953 | "outputPrepend", 4954 | "outputPrepend", 4955 | "outputPrepend", 4956 | "outputPrepend", 4957 | "outputPrepend", 4958 | "outputPrepend", 4959 | "outputPrepend", 4960 | "outputPrepend", 4961 | "outputPrepend", 4962 | "outputPrepend", 4963 | "outputPrepend", 4964 | "outputPrepend", 4965 | "outputPrepend", 4966 | "outputPrepend", 4967 | "outputPrepend", 4968 | "outputPrepend", 4969 | "outputPrepend", 4970 | "outputPrepend" 4971 | ] 4972 | }, 4973 | "outputs": [], 4974 | "source": [ 4975 | "X,Y,Z = voxel.shape[:3]\n", 4976 | "for y in tqdm(range(Y)):\n", 4977 | " for z in range(Z):\n", 4978 | " for x in range(X): \n", 4979 | " if (voxel[x,y,z] == 0).all():\n", 4980 | " blocks.append(0)\n", 4981 | " data.append(0)\n", 4982 | " else:\n", 4983 | " color_data = calc_nearest_block(voxel[x,y,z],config)\n", 4984 | " blocks.append(color_data['BLOCK_ID'])\n", 4985 | " data.append(color_data['DATA'])" 4986 | ] 4987 | }, 4988 | { 4989 | "cell_type": "code", 4990 | "execution_count": null, 4991 | "metadata": {}, 4992 | "outputs": [], 4993 | "source": [ 4994 | "set(blocks)" 4995 | ] 4996 | }, 4997 | { 4998 | "cell_type": "code", 4999 | "execution_count": null, 5000 | "metadata": {}, 5001 | "outputs": [], 5002 | "source": [ 5003 | "from nbtlib import nbt,tag\n", 5004 | "schem = nbt.load('data/original')\n", 5005 | "out_path = os.path.join('output',OUTPUT_FILE)\n", 5006 | "os.makedirs('output',exist_ok=True)\n", 5007 | "output(out_path,schem)" 5008 | ] 5009 | }, 5010 | { 5011 | "cell_type": "code", 5012 | "execution_count": null, 5013 | "metadata": {}, 5014 | "outputs": [], 5015 | "source": [] 5016 | } 5017 | ], 5018 | "metadata": { 5019 | "language_info": { 5020 | "codemirror_mode": { 5021 | "name": "ipython", 5022 | "version": 3 5023 | }, 5024 | "file_extension": ".py", 5025 | "mimetype": "text/x-python", 5026 | "name": "python", 5027 | "nbconvert_exporter": "python", 5028 | "pygments_lexer": "ipython3", 5029 | "version": "3.7.7-final" 5030 | }, 5031 | "orig_nbformat": 2, 5032 | "kernelspec": { 5033 | "name": "python37764bitobj2schematiccondaddadbb272fa7485789f23bb0e8dbad92", 5034 | "display_name": "Python 3.7.7 64-bit ('obj2schematic': conda)" 5035 | } 5036 | }, 5037 | "nbformat": 4, 5038 | "nbformat_minor": 2 5039 | } -------------------------------------------------------------------------------- /empty_schematic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/takecx/obj2schematic/0e7208e7317a0ca08ed9b2897be4de14091c9659/empty_schematic -------------------------------------------------------------------------------- /images/sample_obj_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/takecx/obj2schematic/0e7208e7317a0ca08ed9b2897be4de14091c9659/images/sample_obj_view.png -------------------------------------------------------------------------------- /images/sample_schematic_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/takecx/obj2schematic/0e7208e7317a0ca08ed9b2897be4de14091c9659/images/sample_schematic_view.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | appnope==0.1.0 2 | astroid==2.4.2 3 | attrs==19.3.0 4 | autopep8==1.5.3 5 | backcall==0.2.0 6 | bleach==3.1.5 7 | certifi==2020.6.20 8 | chardet==3.0.4 9 | cycler==0.10.0 10 | decorator==4.4.2 11 | defusedxml==0.6.0 12 | entrypoints==0.3 13 | hmmlearn==0.2.3 14 | idna==2.10 15 | importlib-metadata==1.7.0 16 | ipykernel==5.3.4 17 | ipython==7.16.1 18 | ipython-genutils==0.2.0 19 | ipywidgets==7.5.1 20 | isort==4.3.21 21 | jedi==0.17.2 22 | Jinja2==2.11.2 23 | jsonschema==3.2.0 24 | jupyter==1.0.0 25 | jupyter-client==6.1.6 26 | jupyter-console==6.1.0 27 | jupyter-core==4.6.3 28 | kiwisolver==1.2.0 29 | lazy-object-proxy==1.4.3 30 | MarkupSafe==1.1.1 31 | matplotlib==3.3.0 32 | mccabe==0.6.1 33 | mistune==0.8.4 34 | nbconvert==5.6.1 35 | nbformat==5.0.7 36 | nbtlib==1.7.0 37 | notebook==6.0.3 38 | numpy==1.19.1 39 | packaging==20.4 40 | pandas==1.0.5 41 | pandocfilters==1.4.2 42 | parso==0.7.1 43 | pexpect==4.8.0 44 | pickleshare==0.7.5 45 | Pillow==7.2.0 46 | plotly==3.10.0 47 | prometheus-client==0.8.0 48 | prompt-toolkit==3.0.5 49 | ptyprocess==0.6.0 50 | pycodestyle==2.6.0 51 | Pygments==2.6.1 52 | pylint==2.5.3 53 | pyparsing==2.4.7 54 | pyrsistent==0.16.0 55 | python-dateutil==2.8.1 56 | pytz==2020.1 57 | PyWavefront==1.3.2 58 | pyzmq==19.0.1 59 | qtconsole==4.7.5 60 | QtPy==1.9.0 61 | requests==2.24.0 62 | retrying==1.3.3 63 | Send2Trash==1.5.0 64 | six==1.15.0 65 | terminado==0.8.3 66 | testpath==0.4.4 67 | toml==0.10.1 68 | tornado==6.0.4 69 | tqdm==4.48.0 70 | traitlets==4.3.3 71 | typed-ast==1.4.1 72 | urllib3==1.25.10 73 | wcwidth==0.2.5 74 | webencodings==0.5.1 75 | widgetsnbextension==3.5.1 76 | wrapt==1.12.1 77 | zipp==3.1.0 78 | --------------------------------------------------------------------------------