0x608060405234801561000f575f80fd5b5061001861001d565b6100d9565b5f54610100900460ff16156100885760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146100d7575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611b54806100e65f395ff3fe608060405234801561000f575f80fd5b5060043610610149575f3560e01c8063485cc955116100c757806395d89b411161007d578063a9059cbb11610063578063a9059cbb1461028e578063dd62ed3e146102a1578063f1650a46146102e6575f80fd5b806395d89b4114610273578063a457c2d71461027b575f80fd5b806370a08231116100ad57806370a082311461022357806379cc6790146102585780638456cb591461026b575f80fd5b8063485cc955146102055780635c975abb14610218575f80fd5b806323b872dd1161011c578063395093511161010257806339509351146101d75780633f4ba83a146101ea57806340c10f19146101f2575f80fd5b806323b872dd146101b5578063313ce567146101c8575f80fd5b806306fdde031461014d578063095ea7b31461016b57806315864e0a1461018e57806318160ddd146101a3575b5f80fd5b610155610330565b60405161016291906117a1565b60405180910390f35b61017e610179366004611832565b6103c0565b6040519015158152602001610162565b6101a161019c36600461185a565b6103d9565b005b6035545b604051908152602001610162565b61017e6101c336600461187a565b610528565b60405160128152602001610162565b61017e6101e5366004611832565b61054b565b6101a1610596565b6101a1610200366004611832565b610672565b6101a16102133660046118b3565b6107ab565b60655460ff1661017e565b6101a761023136600461185a565b73ffffffffffffffffffffffffffffffffffffffff165f9081526033602052604090205490565b6101a1610266366004611832565b610a15565b6101a1610afb565b610155610bf3565b61017e610289366004611832565b610c02565b61017e61029c366004611832565b610cb8565b6101a76102af3660046118b3565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260346020908152604080832093909416825291909152205490565b5f5461030b9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610162565b60606036805461033f906118e4565b80601f016020809104026020016040519081016040528092919081815260200182805461036b906118e4565b80156103b65780601f1061038d576101008083540402835291602001916103b6565b820191905f5260205f20905b81548152906001019060200180831161039957829003601f168201915b5050505050905090565b5f336103cd818585610cc5565b60019150505b92915050565b5f80546040517f91d14854000000000000000000000000000000000000000000000000000000008152600481019290925233602483015262010000900473ffffffffffffffffffffffffffffffffffffffff16906391d1485490604401602060405180830381865afa158015610451573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104759190611935565b6104ab576040517f164931f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b481610e43565b5f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff841690810291909117825560405190917f9cf19cefd9aab739c33b95716ee3f3f921f219dc6d7aae25e1f9497b3788915091a250565b5f33610535858285610e93565b610540858585610f4f565b506001949350505050565b335f81815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906103cd9082908690610591908790611954565b610cc5565b5f80546040517f91d14854000000000000000000000000000000000000000000000000000000008152600481019290925233602483015262010000900473ffffffffffffffffffffffffffffffffffffffff16906391d1485490604401602060405180830381865afa15801561060e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106329190611935565b610668576040517f164931f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610670611175565b565b5f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6600482018190523360248301529162010000900473ffffffffffffffffffffffffffffffffffffffff16906391d1485490604401602060405180830381865afa15801561070a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061072e9190611935565b610794575f8160405160200161074691815260200190565b6040516020818303038152906040529050806040517f2cd5664100000000000000000000000000000000000000000000000000000000815260040161078b91906117a1565b60405180910390fd5b61079c6111f2565b6107a68383611245565b505050565b5f54610100900460ff16158080156107c957505f54600160ff909116105b806107e25750303b1580156107e257505f5460ff166001145b6108545760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161078b565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108b0575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108b983610e43565b6108c282610e43565b6109366040518060400160405280600581526020017f72734554480000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f727345544800000000000000000000000000000000000000000000000000000081525061131f565b61093e6113a5565b5f80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff851690810291909117825560405190917f9cf19cefd9aab739c33b95716ee3f3f921f219dc6d7aae25e1f9497b3788915091a280156107a6575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848600482018190523360248301529162010000900473ffffffffffffffffffffffffffffffffffffffff16906391d1485490604401602060405180830381865afa158015610aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad19190611935565b610ae9575f8160405160200161074691815260200190565b610af16111f2565b6107a68383611429565b5f546040517f91d148540000000000000000000000000000000000000000000000000000000081527faf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c60048201523360248201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906391d1485490604401602060405180830381865afa158015610b91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190611935565b610beb576040517f210d9c6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106706115b9565b60606037805461033f906118e4565b335f81815260346020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610cab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161078b565b6105408286868403610cc5565b5f336103cd818585610f4f565b73ffffffffffffffffffffffffffffffffffffffff8316610d4d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161078b565b73ffffffffffffffffffffffffffffffffffffffff8216610dd65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161078b565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8116610e90576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152603460209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f495781811015610f3c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161078b565b610f498484848403610cc5565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610fd85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161078b565b73ffffffffffffffffffffffffffffffffffffffff82166110615760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161078b565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260336020526040902054818110156110fc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161078b565b73ffffffffffffffffffffffffffffffffffffffff8085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111689086815260200190565b60405180910390a3610f49565b61117d611614565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60655460ff16156106705760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161078b565b73ffffffffffffffffffffffffffffffffffffffff82166112a85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161078b565b8060355f8282546112b99190611954565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b5050565b5f54610100900460ff1661139b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078b565b61131b8282611666565b5f54610100900460ff166114215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078b565b6106706116fb565b73ffffffffffffffffffffffffffffffffffffffff82166114b25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161078b565b73ffffffffffffffffffffffffffffffffffffffff82165f908152603360205260409020548181101561154d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078b565b73ffffffffffffffffffffffffffffffffffffffff83165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6115c16111f2565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111c83390565b60655460ff166106705760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161078b565b5f54610100900460ff166116e25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078b565b60366116ee8382611a06565b5060376107a68282611a06565b5f54610100900460ff166117775760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078b565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f6020808352835180828501525f5b818110156117cc578581018301518582016040015282016117b0565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461182d575f80fd5b919050565b5f8060408385031215611843575f80fd5b61184c8361180a565b946020939093013593505050565b5f6020828403121561186a575f80fd5b6118738261180a565b9392505050565b5f805f6060848603121561188c575f80fd5b6118958461180a565b92506118a36020850161180a565b9150604084013590509250925092565b5f80604083850312156118c4575f80fd5b6118cd8361180a565b91506118db6020840161180a565b90509250929050565b600181811c908216806118f857607f821691505b60208210810361192f577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215611945575f80fd5b81518015158114611873575f80fd5b808201808211156103d3577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f8211156107a6575f81815260208120601f850160051c810160208610156119df5750805b601f850160051c820191505b818110156119fe578281556001016119eb565b505050505050565b815167ffffffffffffffff811115611a2057611a2061198c565b611a3481611a2e84546118e4565b846119b9565b602080601f831160018114611a86575f8415611a505750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556119fe565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611ad257888601518255948401946001909101908401611ab3565b5085821015611b0e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220f44ac61edd94ad180c227f7a1d009667c29377eaffde4fe447450d9f635f0ae964736f6c63430008150033