60806040523480156200001157600080fd5b506040516200494638038062004946833981016040819052620000349162000470565b82336200006481620000506200012460201b62000de81760201c565b6200015a60201b62000e161790919060201c565b506200007a620001ed60201b62000ed31760201c565b6200008f6200021260201b62000f031760201c565b620000a46200023560201b62000f311760201c565b620000b96200025860201b62000f5f1760201c565b620000ce6200027b60201b62000f8d1760201c565b620000fc81620000e86200029e60201b62000fbb1760201c565b620002ce60201b62000fe91790919060201c565b5060006200010b838262000589565b5060016200011a828262000589565b5050505062000677565b6000806200015460017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd62000655565b92915050565b6001600160a01b03811615620001b15781546001600160a01b0319166001600160a01b03821690811783556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35b620001e96307f5828d60e41b6001620001d4620002eb60201b6200102b1760201c565b6200031b60201b62001059179092919060201c565b5050565b62000210631464324b60e21b6001620001d4620002eb60201b6200102b1760201c565b565b6200021063921ed8d160e01b6001620001d4620002eb60201b6200102b1760201c565b620002106303a24d0760e21b6001620001d4620002eb60201b6200102b1760201c565b6200021063152a902d60e11b6001620001d4620002eb60201b6200102b1760201c565b62000210636cdb3d1360e11b6001620001d4620002eb60201b6200102b1760201c565b6000806200015460017f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3162000655565b81546001600160a01b0319166001600160a01b0391909116179055565b6000806200015460017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e62000655565b600160e01b6001600160e01b03198316016200037d5760405162461bcd60e51b815260206004820152601f60248201527f496e74657266616365446574656374696f6e3a2077726f6e672076616c756500604482015260640160405180910390fd5b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003d357600080fd5b81516001600160401b0380821115620003f057620003f0620003ab565b604051601f8301601f19908116603f011681019082821181831017156200041b576200041b620003ab565b816040528381526020925086838588010111156200043857600080fd5b600091505b838210156200045c57858201830151818301840152908201906200043d565b600093810190920192909252949350505050565b6000806000606084860312156200048657600080fd5b83516001600160a01b03811681146200049e57600080fd5b60208501519093506001600160401b0380821115620004bc57600080fd5b620004ca87838801620003c1565b93506040860151915080821115620004e157600080fd5b50620004f086828701620003c1565b9150509250925092565b600181811c908216806200050f57607f821691505b6020821081036200053057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200058457600081815260208120601f850160051c810160208610156200055f5750805b601f850160051c820191505b8181101562000580578281556001016200056b565b5050505b505050565b81516001600160401b03811115620005a557620005a5620003ab565b620005bd81620005b68454620004fa565b8462000536565b602080601f831160018114620005f55760008415620005dc5750858301515b600019600386901b1c1916600185901b17855562000580565b600085815260208120601f198616915b82811015620006265788860151825594840194600190910190840162000605565b5085821015620006455787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156200015457634e487b7160e01b600052601160045260246000fd5b6142bf80620006876000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063805349341161010f578063c3666c36116100a2578063e985e9c511610071578063e985e9c51461046c578063f242432a1461047f578063f2fde38b14610492578063f7ba94bd146104a557600080fd5b8063c3666c3614610415578063d539139314610428578063d547741f1461044f578063e1a8bf2c1461046257600080fd5b806391d14854116100de57806391d14854146103df57806395d89b41146103f2578063a22cb465146103fa578063b0ccc31e1461040d57600080fd5b806380534934146103795780638bb9c5bf1461038c5780638da5cb5b1461039f5780638dc251e3146103cc57600080fd5b80632eb2c2d6116101875780635cfa9297116101565780635cfa92971461032d57806361ba27da1461034057806373c8a958146103535780637e518ec81461036657600080fd5b80632eb2c2d6146102df5780632f2ff15d146102f25780634e1273f4146103055780635b2bd79e1461032557600080fd5b80630e89341c116101c35780630e89341c14610267578063114ba8ee1461027a578063124d91e51461028d5780632a55205a146102a057600080fd5b8062fdd58e146101f457806301ffc9a71461021a57806306fdde031461023d5780630d6a5bbb14610252575b600080fd5b6102076102023660046135eb565b6104b8565b6040519081526020015b60405180910390f35b61022d610228366004613645565b6104d7565b6040519015158152602001610211565b6102456104eb565b60405161021191906136d7565b610265610260366004613771565b610579565b005b61024561027536600461381e565b610669565b610265610288366004613837565b61067d565b61026561029b366004613854565b6106e2565b6102b36102ae366004613889565b6106ff565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610211565b6102656102ed3660046138ab565b610722565b61026561030036600461396a565b610764565b61031861031336600461399a565b610787565b6040516102119190613a41565b6102456107ac565b61026561033b366004613a54565b6107c3565b61026561034e36600461381e565b61084a565b610265610361366004613abe565b610865565b610265610374366004613b58565b610981565b610265610387366004613b9a565b6109a2565b61026561039a36600461381e565b6109c5565b6103a76109d9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6102656103da366004613837565b610a00565b61022d6103ed36600461396a565b610a1b565b610245610a5f565b610265610408366004613c1a565b610a6c565b6103a7610a9a565b610265610423366004613abe565b610aa7565b6102077f6d696e746572000000000000000000000000000000000000000000000000000081565b61026561045d36600461396a565b610c4a565b610207620186a081565b61022d61047a366004613c48565b610c6d565b61026561048d366004613c76565b610cbb565b6102656104a0366004613837565b610cf0565b6102656104b336600461399a565b610d04565b60006104ce83836104c7611165565b9190611193565b90505b92915050565b60006104d1826104e561102b565b90611247565b600080546104f890613ce0565b80601f016020809104026020016040519081016040528092919081815260200182805461052490613ce0565b80156105715780601f1061054657610100808354040283529160200191610571565b820191906000526020600020905b81548152906001019060200180831161055457829003601f168201915b505050505081565b336105ae7f6d696e7465720000000000000000000000000000000000000000000000000000826105a7611321565b919061134f565b61065f818989898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b91829185019084908082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a91508990819084018382808284376000920191909152506106559250611165915050565b94939291906113fb565b5050505050505050565b60606104d1826106776115e0565b9061160e565b610690335b61068a610de8565b90611642565b6106df8161069c610fbb565b9081547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff91909116179055565b50565b6106fa338484846106f1611165565b939291906116c5565b505050565b600080610716848461070f6117a2565b91906117d0565b915091505b9250929050565b33610737818a610730610fbb565b919061187a565b610759818a8a8a8a8a8a8a8a61074b611165565b9897969594939291906118b7565b505050505050505050565b336107718161068a610de8565b6106fa83838361077f611321565b929190611baf565b60606107a185858585610798611165565b93929190611c86565b90505b949350505050565b60606107be6107b96115e0565b611dc4565b905090565b336107f17f6d696e7465720000000000000000000000000000000000000000000000000000826105a7611321565b6108428187878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506108389250611165915050565b9493929190611e5a565b505050505050565b61085333610682565b6106df8161085f6117a2565b90611f68565b61086e33610682565b84838114801561087d57508082145b6108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5265636f766572793a20696e636f6e73697374656e742061727261797300000060448201526064015b60405180910390fd5b60005b81811461065f5761097988888381811061090757610907613d33565b905060200201602081019061091c9190613837565b85858481811061092e5761092e613d33565b9050602002013588888581811061094757610947613d33565b905060200201602081019061095c9190613837565b73ffffffffffffffffffffffffffffffffffffffff169190611fee565b6001016108eb565b61098a33610682565b61099e82826109976115e0565b919061207b565b5050565b6109be3386868686866109b3611165565b9594939291906120c6565b5050505050565b6106df33826109d2611321565b919061227d565b60006107be6109e6610de8565b5473ffffffffffffffffffffffffffffffffffffffff1690565b610a0933610682565b6106df81610a156117a2565b90612319565b60006104ce8383610a2a611321565b60009283526020908152604080842073ffffffffffffffffffffffffffffffffffffffff909316845291905290205460ff1690565b600180546104f890613ce0565b8015610a8457610a8482610a7e610fbb565b90612366565b61099e338383610a92611165565b929190612370565b60006107be6109e6610fbb565b610ab033610682565b848381148015610abf57508082145b610b25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5265636f766572793a20696e636f6e73697374656e742061727261797300000060448201526064016108df565b60005b81811461065f57858582818110610b4157610b41613d33565b9050602002016020810190610b569190613837565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd308a8a85818110610b8457610b84613d33565b9050602002016020810190610b999190613837565b878786818110610bab57610bab613d33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b50505050806001019050610b28565b33610c578161068a610de8565b6106fa838383610c65611321565b9291906124a0565b60006104ce8383610c7c611165565b919073ffffffffffffffffffffffffffffffffffffffff9182166000908152600193909301602090815260408085209290931684525290205460ff1690565b33610cc98188610730610fbb565b610ce781888888888888610cdb611165565b9695949392919061256a565b50505050505050565b6106df3382610cfd610de8565b919061274d565b610d0d33610682565b82818114610d77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5265636f766572793a20696e636f6e73697374656e742061727261797300000060448201526064016108df565b60005b81811461084257610de0848483818110610d9657610d96613d33565b90506020020135878784818110610daf57610daf613d33565b9050602002016020810190610dc49190613837565b73ffffffffffffffffffffffffffffffffffffffff1690612879565b600101610d7a565b6000806104d160017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd613d91565b73ffffffffffffffffffffffffffffffffffffffff811615610e9e5781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff821690811783556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35b61099e7f7f5828d0000000000000000000000000000000000000000000000000000000006001610ecc61102b565b9190611059565b610f017f5190c92c000000000000000000000000000000000000000000000000000000006001610ecc61102b565b565b610f017f921ed8d1000000000000000000000000000000000000000000000000000000006001610ecc61102b565b610f017f0e89341c000000000000000000000000000000000000000000000000000000006001610ecc61102b565b610f017f2a55205a000000000000000000000000000000000000000000000000000000006001610ecc61102b565b610f017fd9b67a26000000000000000000000000000000000000000000000000000000006001610ecc61102b565b6000806104d160017f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd31613d91565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff91909116179055565b6000806104d160017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e613d91565b7c01000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601611101576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e74657266616365446574656374696f6e3a2077726f6e672076616c75650060448201526064016108df565b7fffffffff00000000000000000000000000000000000000000000000000000000919091166000908152602092909252604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000806104d160017f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8613613d91565b600073ffffffffffffffffffffffffffffffffffffffff8316611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f455243313135353a2062616c616e6365206f662061646472657373283029000060448201526064016108df565b5060009081526020928352604080822073ffffffffffffffffffffffffffffffffffffffff9390931682529190925290205490565b60007c01000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601611297575060006104d1565b7ffe003659000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016112e8575060016104d1565b507fffffffff00000000000000000000000000000000000000000000000000000000166000908152602091909152604090205460ff1690565b6000806104d160017fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b23613d91565b60008281526020848152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166106fa5761138d826129d3565b60405160200161139d9190613da4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108df916004016136d7565b73ffffffffffffffffffffffffffffffffffffffff8416611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f455243313135353a206d696e7420746f2061646472657373283029000000000060448201526064016108df565b8251825181146114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a20696e636f6e73697374656e74206172726179730000000060448201526064016108df565b60005b8181146115345761152c888787848151811061150557611505613d33565b602002602001015187858151811061151f5761151f613d33565b6020026020010151612b65565b6001016114e7565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115ac929190613e10565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15610ce757610ce786600087878787612c39565b6000806104d160017fe94434e3c6b941c5d90218142fadcc69cb2e13723993540bfa1c131dd1d3475a613d91565b60608261161a83612d61565b60405160200161162b929190613e3e565b604051602081830303815290604052905092915050565b815473ffffffffffffffffffffffffffffffffffffffff82811691161461099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f776e6572736869703a206e6f7420746865206f776e6572000000000000000060448201526064016108df565b6116d0858486612e1f565b611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a206e6f6e2d617070726f7665642073656e6465720000000060448201526064016108df565b61174285848484612e94565b604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86811692908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6000806104d160017f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b80007826858613d91565b825473ffffffffffffffffffffffffffffffffffffffff8116906000907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1683158061181e575080155b1561182c5760009150611871565b620186a084101561185657620186a06118458286613ee3565b61184f9190613efa565b9150611871565b80611864620186a086613efa565b61186e9190613ee3565b91505b50935093915050565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146106fa576106fa8383612f34565b73ffffffffffffffffffffffffffffffffffffffff8716611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f455243313135353a207472616e7366657220746f20616464726573732830290060448201526064016108df565b8483811461199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a20696e636f6e73697374656e74206172726179730000000060448201526064016108df565b6119a98b8a8c612e1f565b611a0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a206e6f6e2d617070726f7665642073656e6465720000000060448201526064016108df565b60005b818114611a5e57611a568c8b8b8b8b86818110611a3157611a31613d33565b905060200201358a8a87818110611a4a57611a4a613d33565b9050602002013561305b565b600101611a12565b508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8a8a8a8a604051611ad99493929190613f80565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff88163b15611ba257611ba28a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a9081908401838280828437600092019190915250612c3992505050565b5050505050505050505050565b60008381526020858152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16611c805760008381526020858152604080832073ffffffffffffffffffffffffffffffffffffffff8681168086529184529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815187815292830152918316918101919091527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d906060015b60405180910390a15b50505050565b606083828114611cf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a20696e636f6e73697374656e74206172726179730000000060448201526064016108df565b8467ffffffffffffffff811115611d0b57611d0b613fa7565b604051908082528060200260200182016040528015611d34578160200160208202803683370190505b50915060005b818114611db957611d94878783818110611d5657611d56613d33565b9050602002016020810190611d6b9190613837565b868684818110611d7d57611d7d613d33565b905060200201358a6111939092919063ffffffff16565b838281518110611da657611da6613d33565b6020908102919091010152600101611d3a565b505095945050505050565b6060816000018054611dd590613ce0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0190613ce0565b8015611e4e5780601f10611e2357610100808354040283529160200191611e4e565b820191906000526020600020905b815481529060010190602001808311611e3157829003601f168201915b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff8416611ed7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f455243313135353a206d696e7420746f2061646472657373283029000000000060448201526064016108df565b611ee386858585612b65565b604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff80871692600092918916917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff84163b15610842576108428560008686868661320e565b620186a0811115611fa8576040517f3affc6c4000000000000000000000000000000000000000000000000000000008152600481018290526024016108df565b81546bffffffffffffffffffffffff909116740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff909116179055565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106fa90849061326a565b8261208782848361401c565b507f04b1dc5c136a3ce9fded8db0ce3d3366c58764ec3a8e4c2b9e52e4ddfe5ebbf782826040516120b9929190614136565b60405180910390a1505050565b82818114612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a20696e636f6e73697374656e74206172726179730000000060448201526064016108df565b61213b888789612e1f565b6121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a206e6f6e2d617070726f7665642073656e6465720000000060448201526064016108df565b60005b8181146121ef576121e789888888858181106121c2576121c2613d33565b905060200201358787868181106121db576121db613d33565b90506020020135612e94565b6001016121a4565b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8888888860405161226b9493929190613f80565b60405180910390a45050505050505050565b61228883828461134f565b60008181526020848152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580518481529182018390528101919091527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b906060016120b9565b73ffffffffffffffffffffffffffffffffffffffff8116610fe9576040517f6fe1b4c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099e8282612f34565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612405576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f455243313135353a2073656c662d617070726f76616c20666f7220616c6c000060448201526064016108df565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260018701602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b60008381526020858152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff1615611c805760008381526020858152604080832073ffffffffffffffffffffffffffffffffffffffff8681168086529184529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815187815292830152918316918101919091527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90606001611c77565b73ffffffffffffffffffffffffffffffffffffffff85166125e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f455243313135353a207472616e7366657220746f20616464726573732830290060448201526064016108df565b6125f2888789612e1f565b612658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f455243313135353a206e6f6e2d617070726f7665642073656e6465720000000060448201526064016108df565b612665888787878761305b565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516126e4929190918252602082015260400190565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b1561065f5761065f878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061320e92505050565b825473ffffffffffffffffffffffffffffffffffffffff90811690831681146127d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f776e6572736869703a206e6f7420746865206f776e6572000000000000000060448201526064016108df565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c805783547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182178655604051908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350505050565b804710156128e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108df565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461293d576040519150601f19603f3d011682016040523d82523d6000602084013e612942565b606091505b50509050806106fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108df565b606060008290036129f257505060408051602081019091526000815290565b600082604051602001612a0791815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050601f5b818181518110612a4c57612a4c613d33565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016600003612aa1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612a3a565b60008160010167ffffffffffffffff811115612abf57612abf613fa7565b6040519080825280601f01601f191660200182016040528015612ae9576020820181803683370190505b50905060005b828111612b5c57838181518110612b0857612b08613d33565b602001015160f81c60f81b828281518110612b2557612b25613d33565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101612aef565b50949350505050565b8015611c805760008281526020858152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902054818101818111612c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243313135353a2062616c616e6365206f766572666c6f770000000000000060448201526064016108df565b60009384526020958652604080852073ffffffffffffffffffffffffffffffffffffffff9690961685529490955250502055565b6040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063bc197c8190612c95908a908a90899089908990600401614183565b6020604051808303816000875af1158015612cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd891906141ee565b7fffffffff000000000000000000000000000000000000000000000000000000001614610842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f455243313135353a207472616e736665722072656a656374656400000000000060448201526064016108df565b60606000612d6e83613376565b600101905060008167ffffffffffffffff811115612d8e57612d8e613fa7565b6040519080825280601f01601f191660200182016040528015612db8576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084612dc257509392505050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806107a457505073ffffffffffffffffffffffffffffffffffffffff9182166000908152600193909301602090815260408085209290931684525290205460ff1690565b8015611c805760008281526020858152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902054818103818110612c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f455243313135353a20696e73756666696369656e742062616c616e636500000060448201526064016108df565b815473ffffffffffffffffffffffffffffffffffffffff168015801590612f72575060008173ffffffffffffffffffffffffffffffffffffffff163b115b156106fa576040517fc617113400000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282169063c617113490604401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061420b565b6106fa576040517fede71dcc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108df565b80156109be5760008281526020868152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091529020548181038181106130fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f455243313135353a20696e73756666696369656e742062616c616e636500000060448201526064016108df565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610ce75760008481526020888152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020548381018181116131c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243313135353a2062616c616e6365206f766572666c6f770000000000000060448201526064016108df565b600086815260208a8152604080832073ffffffffffffffffffffffffffffffffffffffff808d1685528184528285208890558b1684529091529020555050505050505050565b6040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063f23a6e6190612c95908a908a90899089908990600401614228565b60006132cc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166134589092919063ffffffff16565b8051909150156106fa57808060200190518101906132ea919061420b565b6106fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016108df565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106133bf577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106133eb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061340957662386f26fc10000830492506010015b6305f5e1008310613421576305f5e100830492506008015b612710831061343557612710830492506004015b60648310613447576064830492506002015b600a83106104d15760010192915050565b60606107a48484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161348c919061426d565b60006040518083038185875af1925050503d80600081146134c9576040519150601f19603f3d011682016040523d82523d6000602084013e6134ce565b606091505b50915091506134df878383876134ea565b979650505050505050565b606083156135805782516000036135795773ffffffffffffffffffffffffffffffffffffffff85163b613579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108df565b50816107a4565b6107a483838151156135955781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df91906136d7565b73ffffffffffffffffffffffffffffffffffffffff811681146106df57600080fd5b600080604083850312156135fe57600080fd5b8235613609816135c9565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146106df57600080fd5b60006020828403121561365757600080fd5b813561366281613617565b9392505050565b60005b8381101561368457818101518382015260200161366c565b50506000910152565b600081518084526136a5816020860160208601613669565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006104ce602083018461368d565b60008083601f8401126136fc57600080fd5b50813567ffffffffffffffff81111561371457600080fd5b6020830191508360208260051b850101111561071b57600080fd5b60008083601f84011261374157600080fd5b50813567ffffffffffffffff81111561375957600080fd5b60208301915083602082850101111561071b57600080fd5b60008060008060008060006080888a03121561378c57600080fd5b8735613797816135c9565b9650602088013567ffffffffffffffff808211156137b457600080fd5b6137c08b838c016136ea565b909850965060408a01359150808211156137d957600080fd5b6137e58b838c016136ea565b909650945060608a01359150808211156137fe57600080fd5b5061380b8a828b0161372f565b989b979a50959850939692959293505050565b60006020828403121561383057600080fd5b5035919050565b60006020828403121561384957600080fd5b8135613662816135c9565b60008060006060848603121561386957600080fd5b8335613874816135c9565b95602085013595506040909401359392505050565b6000806040838503121561389c57600080fd5b50508035926020909101359150565b60008060008060008060008060a0898b0312156138c757600080fd5b88356138d2816135c9565b975060208901356138e2816135c9565b9650604089013567ffffffffffffffff808211156138ff57600080fd5b61390b8c838d016136ea565b909850965060608b013591508082111561392457600080fd5b6139308c838d016136ea565b909650945060808b013591508082111561394957600080fd5b506139568b828c0161372f565b999c989b5096995094979396929594505050565b6000806040838503121561397d57600080fd5b82359150602083013561398f816135c9565b809150509250929050565b600080600080604085870312156139b057600080fd5b843567ffffffffffffffff808211156139c857600080fd5b6139d4888389016136ea565b909650945060208701359150808211156139ed57600080fd5b506139fa878288016136ea565b95989497509550505050565b600081518084526020808501945080840160005b83811015613a3657815187529582019590820190600101613a1a565b509495945050505050565b6020815260006104ce6020830184613a06565b600080600080600060808688031215613a6c57600080fd5b8535613a77816135c9565b94506020860135935060408601359250606086013567ffffffffffffffff811115613aa157600080fd5b613aad8882890161372f565b969995985093965092949392505050565b60008060008060008060608789031215613ad757600080fd5b863567ffffffffffffffff80821115613aef57600080fd5b613afb8a838b016136ea565b90985096506020890135915080821115613b1457600080fd5b613b208a838b016136ea565b90965094506040890135915080821115613b3957600080fd5b50613b4689828a016136ea565b979a9699509497509295939492505050565b60008060208385031215613b6b57600080fd5b823567ffffffffffffffff811115613b8257600080fd5b613b8e8582860161372f565b90969095509350505050565b600080600080600060608688031215613bb257600080fd5b8535613bbd816135c9565b9450602086013567ffffffffffffffff80821115613bda57600080fd5b613be689838a016136ea565b90965094506040880135915080821115613bff57600080fd5b50613aad888289016136ea565b80151581146106df57600080fd5b60008060408385031215613c2d57600080fd5b8235613c38816135c9565b9150602083013561398f81613c0c565b60008060408385031215613c5b57600080fd5b8235613c66816135c9565b9150602083013561398f816135c9565b60008060008060008060a08789031215613c8f57600080fd5b8635613c9a816135c9565b95506020870135613caa816135c9565b94506040870135935060608701359250608087013567ffffffffffffffff811115613cd457600080fd5b613b4689828a0161372f565b600181811c90821680613cf457607f821691505b602082108103613d2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156104d1576104d1613d62565b7f416363657373436f6e74726f6c3a206d697373696e6720270000000000000000815260008251613ddc816018850160208701613669565b7f2720726f6c6500000000000000000000000000000000000000000000000000006018939091019283015250601e01919050565b604081526000613e236040830185613a06565b8281036020840152613e358185613a06565b95945050505050565b6000808454613e4c81613ce0565b60018281168015613e645760018114613e9757613ec6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450613ec6565b8860005260208060002060005b85811015613ebd5781548a820152908401908201613ea4565b50505082870194505b505050508351613eda818360208801613669565b01949350505050565b80820281158282048414176104d1576104d1613d62565b600082613f30577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115613f6757600080fd5b8260051b80836020870137939093016020019392505050565b604081526000613f94604083018688613f35565b82810360208401526134df818587613f35565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156106fa57600081815260208120601f850160051c81016020861015613ffd5750805b601f850160051c820191505b8181101561084257828155600101614009565b67ffffffffffffffff83111561403457614034613fa7565b614048836140428354613ce0565b83613fd6565b6000601f84116001811461409a57600085156140645750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556109be565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140e957868501358255602094850194600190920191016140c9565b5086821015614124577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526141bc60a0830186613a06565b82810360608401526141ce8186613a06565b905082810360808401526141e2818561368d565b98975050505050505050565b60006020828403121561420057600080fd5b815161366281613617565b60006020828403121561421d57600080fd5b815161366281613c0c565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a060808301526134df60a083018461368d565b6000825161427f818460208701613669565b919091019291505056fea26469706673582212203a6d9937a41acf1c5a828b095e6ec978bc8026ec9ed7b65028e56c4b4f26491964736f6c63430008110033000000000000000000000000000000000000aaeb6d7670e522a718067333cd4e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000015416e696368657373204f7262206f6620506f776572000000000000000000000000000000000000000000000000000000000000000000000000000000000000034f52420000000000000000000000000000000000000000000000000000000000