0x608060405234801561000f575f80fd5b5060405161286e38038061286e833981810160405281019061003191906104ef565b6040518060400160405280600c81526020017f52574120444220544f4b454e00000000000000000000000000000000000000008152506040518060400160405280600981526020017f5257412d544f4b454e000000000000000000000000000000000000000000000081525081600390816100ac9190610754565b5080600490816100bc9190610754565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101249061087d565b60405180910390fd5b3360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101e5336101bf6101eb60201b60201c565b600a6101cb9190610a03565b6369695b806101da9190610a4d565b6101f360201b60201c565b50610b46565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610263575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161025a9190610a9d565b60405180910390fd5b6102745f838361027860201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102c8578060025f8282546102bc9190610ab6565b92505081905550610396565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610351578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034893929190610af8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103dd578060025f8282540392505081905550610427565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104849190610b2d565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6104be82610495565b9050919050565b6104ce816104b4565b81146104d8575f80fd5b50565b5f815190506104e9816104c5565b92915050565b5f6020828403121561050457610503610491565b5b5f610511848285016104db565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061059557607f821691505b6020821081036105a8576105a7610551565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261060a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826105cf565b61061486836105cf565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61065861065361064e8461062c565b610635565b61062c565b9050919050565b5f819050919050565b6106718361063e565b61068561067d8261065f565b8484546105db565b825550505050565b5f90565b61069961068d565b6106a4818484610668565b505050565b5b818110156106c7576106bc5f82610691565b6001810190506106aa565b5050565b601f82111561070c576106dd816105ae565b6106e6846105c0565b810160208510156106f5578190505b610709610701856105c0565b8301826106a9565b50505b505050565b5f82821c905092915050565b5f61072c5f1984600802610711565b1980831691505092915050565b5f610744838361071d565b9150826002028217905092915050565b61075d8261051a565b67ffffffffffffffff81111561077657610775610524565b5b610780825461057e565b61078b8282856106cb565b5f60209050601f8311600181146107bc575f84156107aa578287015190505b6107b48582610739565b86555061081b565b601f1984166107ca866105ae565b5f5b828110156107f1578489015182556001820191506020850194506020810190506107cc565b8683101561080e578489015161080a601f89168261071d565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f5257412d546f74656e20616464726573732063616e6e6f74206265207a65726f5f82015250565b5f610867602083610823565b915061087282610833565b602082019050919050565b5f6020820190508181035f8301526108948161085b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561091d578086048111156108f9576108f861089b565b5b60018516156109085780820291505b8081029050610916856108c8565b94506108dd565b94509492505050565b5f8261093557600190506109f0565b81610942575f90506109f0565b8160018114610958576002811461096257610991565b60019150506109f0565b60ff8411156109745761097361089b565b5b8360020a91508482111561098b5761098a61089b565b5b506109f0565b5060208310610133831016604e8410600b84101617156109c65782820a9050838111156109c1576109c061089b565b5b6109f0565b6109d384848460016108d4565b925090508184048111156109ea576109e961089b565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610a0d8261062c565b9150610a18836109f7565b9250610a457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610926565b905092915050565b5f610a578261062c565b9150610a628361062c565b9250828202610a708161062c565b91508282048414831517610a8757610a8661089b565b5b5092915050565b610a97816104b4565b82525050565b5f602082019050610ab05f830184610a8e565b92915050565b5f610ac08261062c565b9150610acb8361062c565b9250828201905080821115610ae357610ae261089b565b5b92915050565b610af28161062c565b82525050565b5f606082019050610b0b5f830186610a8e565b610b186020830185610ae9565b610b256040830184610ae9565b949350505050565b5f602082019050610b405f830184610ae9565b92915050565b611d1b80610b535f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c806370a0823111610095578063a9059cbb11610064578063a9059cbb14610275578063b2e1cfe2146102a5578063dd62ed3e146102c1578063ed957f8a146102f1576100f3565b806370a08231146101eb5780638da5cb5b1461021b57806390f4e4841461023957806395d89b4114610257576100f3565b806323b872dd116100d157806323b872dd146101635780632e0f262514610193578063313ce567146101b157806361b59ed7146101cf576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff61030d565b60405161010c91906112ee565b60405180910390f35b61012f600480360381019061012a91906113a3565b61039d565b60405161013c91906113fb565b60405180910390f35b61014d6103bf565b60405161015a9190611423565b60405180910390f35b61017d6004803603810190610178919061143c565b6103c8565b60405161018a91906113fb565b60405180910390f35b61019b6103f6565b6040516101a891906114a7565b60405180910390f35b6101b96103fb565b6040516101c691906114a7565b60405180910390f35b6101e960048036038101906101e491906113a3565b610403565b005b610205600480360381019061020091906114c0565b610664565b6040516102129190611423565b60405180910390f35b6102236106a9565b60405161023091906114fa565b60405180910390f35b6102416106ce565b60405161024e91906114fa565b60405180910390f35b61025f6106f3565b60405161026c91906112ee565b60405180910390f35b61028f600480360381019061028a91906113a3565b610783565b60405161029c91906113fb565b60405180910390f35b6102bf60048036038101906102ba9190611574565b6107a5565b005b6102db60048036038101906102d691906115e5565b6109c5565b6040516102e89190611423565b60405180910390f35b61030b60048036038101906103069190611623565b610a47565b005b60606003805461031c906116ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610348906116ad565b80156103935780601f1061036a57610100808354040283529160200191610393565b820191905f5260205f20905b81548152906001019060200180831161037657829003601f168201915b5050505050905090565b5f806103a7610c7c565b90506103b4818585610c83565b600191505092915050565b5f600254905090565b5f806103d2610c7c565b90506103df858285610c95565b6103ea858585610d27565b60019150509392505050565b600681565b5f6012905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048990611727565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f79061178f565b60405180910390fd5b5f8111610542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610539906117f7565b60405180910390fd5b8061056d60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610664565b10156105ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a59061185f565b60405180910390fd5b6105da60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383610d27565b8173ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f613da6e7c0528843569a5ed0374e6841b208a60d5784bcebe0f972024cc4d62e836040516106589190611423565b60405180910390a35050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610702906116ad565b80601f016020809104026020016040519081016040528092919081815260200182805461072e906116ad565b80156107795780601f1061075057610100808354040283529160200191610779565b820191905f5260205f20905b81548152906001019060200180831161075c57829003601f168201915b5050505050905090565b5f8061078d610c7c565b905061079a818585610d27565b600191505092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082b90611727565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108999061178f565b60405180910390fd5b5f82116108e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108db906117f7565b60405180910390fd5b6010848490501461092a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610921906118c7565b60405180910390fd5b7f20ff0c54864ed1604499d0d44439944c6a20a4ad517ad0d12059ed42ad59a6a6848460405161095b92919061198f565b60405180910390a161096d8183610e17565b8073ffffffffffffffffffffffffffffffffffffffff167f55baee09219deefc39501db6f5c776ac2b1d31591cf4d06adbc1d8a0968fa2e08585856040516109b7939291906119c4565b60405180910390a250505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8311610a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a80906117f7565b60405180910390fd5b82610a9333610664565b1015610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb9061185f565b60405180910390fd5b7f57934c1f0c51d0769829f51a713d941493b08043f9143c3312a07e2079edaf093360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685604051610b2893929190611a64565b60405180910390a15f8015610b98577f57934c1f0c51d0769829f51a713d941493b08043f9143c3312a07e2079edaf093360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686604051610b8b93929190611af6565b60405180910390a1610bf5565b7f57934c1f0c51d0769829f51a713d941493b08043f9143c3312a07e2079edaf093360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686604051610bec93929190611b88565b60405180910390a15b5f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090507f35c798e3cc24778c51a50c7ec0f933a4c91daa5e480cb2b5f63d20d3a244c2488582604051610c6d929190611c22565b60405180910390a15050505050565b5f33905090565b610c908383836001610e96565b505050565b5f610ca084846109c5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d215781811015610d12578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610d0993929190611c50565b60405180910390fd5b610d2084848484035f610e96565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d97575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d8e91906114fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e07575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610dfe91906114fa565b60405180910390fd5b610e12838383611065565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e87575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e7e91906114fa565b60405180910390fd5b610e925f8383611065565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f06575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610efd91906114fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f76575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610f6d91906114fa565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561105f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110569190611423565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110b5578060025f8282546110a99190611cb2565b92505081905550611183565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561113e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161113593929190611c50565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111ca578060025f8282540392505081905550611214565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112719190611423565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112c08261127e565b6112ca8185611288565b93506112da818560208601611298565b6112e3816112a6565b840191505092915050565b5f6020820190508181035f83015261130681846112b6565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61133f82611316565b9050919050565b61134f81611335565b8114611359575f80fd5b50565b5f8135905061136a81611346565b92915050565b5f819050919050565b61138281611370565b811461138c575f80fd5b50565b5f8135905061139d81611379565b92915050565b5f80604083850312156113b9576113b861130e565b5b5f6113c68582860161135c565b92505060206113d78582860161138f565b9150509250929050565b5f8115159050919050565b6113f5816113e1565b82525050565b5f60208201905061140e5f8301846113ec565b92915050565b61141d81611370565b82525050565b5f6020820190506114365f830184611414565b92915050565b5f805f606084860312156114535761145261130e565b5b5f6114608682870161135c565b93505060206114718682870161135c565b92505060406114828682870161138f565b9150509250925092565b5f60ff82169050919050565b6114a18161148c565b82525050565b5f6020820190506114ba5f830184611498565b92915050565b5f602082840312156114d5576114d461130e565b5b5f6114e28482850161135c565b91505092915050565b6114f481611335565b82525050565b5f60208201905061150d5f8301846114eb565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261153457611533611513565b5b8235905067ffffffffffffffff81111561155157611550611517565b5b60208301915083600182028301111561156d5761156c61151b565b5b9250929050565b5f805f806060858703121561158c5761158b61130e565b5b5f85013567ffffffffffffffff8111156115a9576115a8611312565b5b6115b58782880161151f565b945094505060206115c88782880161138f565b92505060406115d98782880161135c565b91505092959194509250565b5f80604083850312156115fb576115fa61130e565b5b5f6116088582860161135c565b92505060206116198582860161135c565b9150509250929050565b5f805f6040848603121561163a5761163961130e565b5b5f6116478682870161138f565b935050602084013567ffffffffffffffff81111561166857611667611312565b5b6116748682870161151f565b92509250509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806116c457607f821691505b6020821081036116d7576116d6611680565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611711602083611288565b915061171c826116dd565b602082019050919050565b5f6020820190508181035f83015261173e81611705565b9050919050565b7f526563697069656e7420616464726573732063616e6e6f74206265207a65726f5f82015250565b5f611779602083611288565b915061178482611745565b602082019050919050565b5f6020820190508181035f8301526117a68161176d565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6117e1602083611288565b91506117ec826117ad565b602082019050919050565b5f6020820190508181035f83015261180e816117d5565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f611849601483611288565b915061185482611815565b602082019050919050565b5f6020820190508181035f8301526118768161183d565b9050919050565b7f496e76616c69642054524e206e756d62657200000000000000000000000000005f82015250565b5f6118b1601283611288565b91506118bc8261187d565b602082019050919050565b5f6020820190508181035f8301526118de816118a5565b9050919050565b828183375f83830152505050565b5f6118fe8385611288565b935061190b8385846118e5565b611914836112a6565b840190509392505050565b7f526571756573742073656e7420746f2053574946542e434f4d20666f722076615f8201527f6c69646174696f6e000000000000000000000000000000000000000000000000602082015250565b5f611979602883611288565b91506119848261191f565b604082019050919050565b5f6040820190508181035f8301526119a88184866118f3565b905081810360208301526119bb8161196d565b90509392505050565b5f6040820190508181035f8301526119dd8185876118f3565b90506119ec6020830184611414565b949350505050565b7f417474656d7074696e67207472616e7366657220746f205257412d546f74656e5f8201527f20636f6e74726163740000000000000000000000000000000000000000000000602082015250565b5f611a4e602983611288565b9150611a59826119f4565b604082019050919050565b5f608082019050611a775f8301866114eb565b611a8460208301856114eb565b611a916040830184611414565b8181036060830152611aa281611a42565b9050949350505050565b7f5257412d546f74656e207472616e73666572206661696c6564000000000000005f82015250565b5f611ae0601983611288565b9150611aeb82611aac565b602082019050919050565b5f608082019050611b095f8301866114eb565b611b1660208301856114eb565b611b236040830184611414565b8181036060830152611b3481611ad4565b9050949350505050565b7f5257412d546f74656e207472616e73666572207375636365737366756c0000005f82015250565b5f611b72601d83611288565b9150611b7d82611b3e565b602082019050919050565b5f608082019050611b9b5f8301866114eb565b611ba860208301856114eb565b611bb56040830184611414565b8181036060830152611bc681611b66565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611bf482611bd0565b611bfe8185611bda565b9350611c0e818560208601611298565b611c17816112a6565b840191505092915050565b5f604082019050611c355f830185611414565b8181036020830152611c478184611bea565b90509392505050565b5f606082019050611c635f8301866114eb565b611c706020830185611414565b611c7d6040830184611414565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611cbc82611370565b9150611cc783611370565b9250828201905080821115611cdf57611cde611c85565b5b9291505056fea264697066735822122055c10ca04b28060e7c0689a6e63923adfdcb741e16d70d920357c7009e76797864736f6c634300081a0033000000000000000000000000635dbaff55881e6e76c9e98baa735ec31453c94e