0x60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200007660201b60201c565b6200007e60201b60201c565b62000259565b80600290805190602001906200007292919062000144565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001529062000223565b90600052602060002090601f016020900481019282620001765760008555620001c2565b82601f106200019157805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c1578251825591602001919060010190620001a4565b5b509050620001d19190620001d5565b5090565b5b80821115620001f0576000816000905550600101620001d6565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023c57607f821691505b60208210811415620002535762000252620001f4565b5b50919050565b612ae180620002696000396000f3fe608060405234801561001057600080fd5b50600436106100b35760003560e01c8063715018a611610071578063715018a6146101b05780638da5cb5b146101ba578063a22cb465146101d8578063e985e9c5146101f4578063f242432a14610224578063f2fde38b14610240576100b3565b8062fdd58e146100b857806301ffc9a7146100e857806302fe5305146101185780630e89341c146101345780632eb2c2d6146101645780634e1273f414610180575b600080fd5b6100d260048036038101906100cd9190611737565b61025c565b6040516100df9190611786565b60405180910390f35b61010260048036038101906100fd91906117f9565b610325565b60405161010f9190611841565b60405180910390f35b610132600480360381019061012d91906119a2565b610407565b005b61014e600480360381019061014991906119eb565b61041b565b60405161015b9190611aa0565b60405180910390f35b61017e60048036038101906101799190611c2b565b6104af565b005b61019a60048036038101906101959190611dbd565b610550565b6040516101a79190611ef3565b60405180910390f35b6101b8610669565b005b6101c261067d565b6040516101cf9190611f24565b60405180910390f35b6101f260048036038101906101ed9190611f6b565b6106a7565b005b61020e60048036038101906102099190611fab565b6106bd565b60405161021b9190611841565b60405180910390f35b61023e60048036038101906102399190611feb565b610751565b005b61025a60048036038101906102559190612082565b6107f2565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c490612121565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103f057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061040057506103ff82610876565b5b9050919050565b61040f6108e0565b6104188161095e565b50565b60606002805461042a90612170565b80601f016020809104026020016040519081016040528092919081815260200182805461045690612170565b80156104a35780601f10610478576101008083540402835291602001916104a3565b820191906000526020600020905b81548152906001019060200180831161048657829003601f168201915b50505050509050919050565b6104b7610978565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806104fd57506104fc856104f7610978565b6106bd565b5b61053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390612214565b60405180910390fd5b6105498585858585610980565b5050505050565b60608151835114610596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058d906122a6565b60405180910390fd5b6000835167ffffffffffffffff8111156105b3576105b2611877565b5b6040519080825280602002602001820160405280156105e15781602001602082028036833780820191505090505b50905060005b845181101561065e5761062e858281518110610606576106056122c6565b5b6020026020010151858381518110610621576106206122c6565b5b602002602001015161025c565b828281518110610641576106406122c6565b5b6020026020010181815250508061065790612324565b90506105e7565b508091505092915050565b6106716108e0565b61067b6000610ca2565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106b96106b2610978565b8383610d68565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610759610978565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079f575061079e85610799610978565b6106bd565b5b6107de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d590612214565b60405180910390fd5b6107eb8585858585610ed5565b5050505050565b6107fa6108e0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561086a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610861906123df565b60405180910390fd5b61087381610ca2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6108e8610978565b73ffffffffffffffffffffffffffffffffffffffff1661090661067d565b73ffffffffffffffffffffffffffffffffffffffff161461095c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109539061244b565b60405180910390fd5b565b80600290805190602001906109749291906115ec565b5050565b600033905090565b81518351146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb906124dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b9061256f565b60405180910390fd5b6000610a3e610978565b9050610a4e818787878787611171565b60005b8451811015610bff576000858281518110610a6f57610a6e6122c6565b5b602002602001015190506000858381518110610a8e57610a8d6122c6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690612601565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610be49190612621565b9250508190555050505080610bf890612324565b9050610a51565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610c76929190612677565b60405180910390a4610c8c818787878787611179565b610c9a818787878787611181565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90612720565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ec89190611841565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c9061256f565b60405180910390fd5b6000610f4f610978565b90506000610f5c85611368565b90506000610f6985611368565b9050610f79838989858589611171565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790612601565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110c59190612621565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611142929190612740565b60405180910390a4611158848a8a86868a611179565b611166848a8a8a8a8a6113e2565b505050505050505050565b505050505050565b505050505050565b6111a08473ffffffffffffffffffffffffffffffffffffffff166115c9565b15611360578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016111e69594939291906127be565b602060405180830381600087803b15801561120057600080fd5b505af192505050801561123157506040513d601f19601f8201168201806040525081019061122e919061283b565b60015b6112d75761123d612875565b806308c379a0141561129a5750611252612897565b8061125d575061129c565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112919190611aa0565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce9061299f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135590612a31565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561138757611386611877565b5b6040519080825280602002602001820160405280156113b55781602001602082028036833780820191505090505b50905082816000815181106113cd576113cc6122c6565b5b60200260200101818152505080915050919050565b6114018473ffffffffffffffffffffffffffffffffffffffff166115c9565b156115c1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611447959493929190612a51565b602060405180830381600087803b15801561146157600080fd5b505af192505050801561149257506040513d601f19601f8201168201806040525081019061148f919061283b565b60015b6115385761149e612875565b806308c379a014156114fb57506114b3612897565b806114be57506114fd565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29190611aa0565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f9061299f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b690612a31565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546115f890612170565b90600052602060002090601f01602090048101928261161a5760008555611661565b82601f1061163357805160ff1916838001178555611661565b82800160010185558215611661579182015b82811115611660578251825591602001919060010190611645565b5b50905061166e9190611672565b5090565b5b8082111561168b576000816000905550600101611673565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116ce826116a3565b9050919050565b6116de816116c3565b81146116e957600080fd5b50565b6000813590506116fb816116d5565b92915050565b6000819050919050565b61171481611701565b811461171f57600080fd5b50565b6000813590506117318161170b565b92915050565b6000806040838503121561174e5761174d611699565b5b600061175c858286016116ec565b925050602061176d85828601611722565b9150509250929050565b61178081611701565b82525050565b600060208201905061179b6000830184611777565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117d6816117a1565b81146117e157600080fd5b50565b6000813590506117f3816117cd565b92915050565b60006020828403121561180f5761180e611699565b5b600061181d848285016117e4565b91505092915050565b60008115159050919050565b61183b81611826565b82525050565b60006020820190506118566000830184611832565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118af82611866565b810181811067ffffffffffffffff821117156118ce576118cd611877565b5b80604052505050565b60006118e161168f565b90506118ed82826118a6565b919050565b600067ffffffffffffffff82111561190d5761190c611877565b5b61191682611866565b9050602081019050919050565b82818337600083830152505050565b6000611945611940846118f2565b6118d7565b90508281526020810184848401111561196157611960611861565b5b61196c848285611923565b509392505050565b600082601f8301126119895761198861185c565b5b8135611999848260208601611932565b91505092915050565b6000602082840312156119b8576119b7611699565b5b600082013567ffffffffffffffff8111156119d6576119d561169e565b5b6119e284828501611974565b91505092915050565b600060208284031215611a0157611a00611699565b5b6000611a0f84828501611722565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a52578082015181840152602081019050611a37565b83811115611a61576000848401525b50505050565b6000611a7282611a18565b611a7c8185611a23565b9350611a8c818560208601611a34565b611a9581611866565b840191505092915050565b60006020820190508181036000830152611aba8184611a67565b905092915050565b600067ffffffffffffffff821115611add57611adc611877565b5b602082029050602081019050919050565b600080fd5b6000611b06611b0184611ac2565b6118d7565b90508083825260208201905060208402830185811115611b2957611b28611aee565b5b835b81811015611b525780611b3e8882611722565b845260208401935050602081019050611b2b565b5050509392505050565b600082601f830112611b7157611b7061185c565b5b8135611b81848260208601611af3565b91505092915050565b600067ffffffffffffffff821115611ba557611ba4611877565b5b611bae82611866565b9050602081019050919050565b6000611bce611bc984611b8a565b6118d7565b905082815260208101848484011115611bea57611be9611861565b5b611bf5848285611923565b509392505050565b600082601f830112611c1257611c1161185c565b5b8135611c22848260208601611bbb565b91505092915050565b600080600080600060a08688031215611c4757611c46611699565b5b6000611c55888289016116ec565b9550506020611c66888289016116ec565b945050604086013567ffffffffffffffff811115611c8757611c8661169e565b5b611c9388828901611b5c565b935050606086013567ffffffffffffffff811115611cb457611cb361169e565b5b611cc088828901611b5c565b925050608086013567ffffffffffffffff811115611ce157611ce061169e565b5b611ced88828901611bfd565b9150509295509295909350565b600067ffffffffffffffff821115611d1557611d14611877565b5b602082029050602081019050919050565b6000611d39611d3484611cfa565b6118d7565b90508083825260208201905060208402830185811115611d5c57611d5b611aee565b5b835b81811015611d855780611d7188826116ec565b845260208401935050602081019050611d5e565b5050509392505050565b600082601f830112611da457611da361185c565b5b8135611db4848260208601611d26565b91505092915050565b60008060408385031215611dd457611dd3611699565b5b600083013567ffffffffffffffff811115611df257611df161169e565b5b611dfe85828601611d8f565b925050602083013567ffffffffffffffff811115611e1f57611e1e61169e565b5b611e2b85828601611b5c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611e6a81611701565b82525050565b6000611e7c8383611e61565b60208301905092915050565b6000602082019050919050565b6000611ea082611e35565b611eaa8185611e40565b9350611eb583611e51565b8060005b83811015611ee6578151611ecd8882611e70565b9750611ed883611e88565b925050600181019050611eb9565b5085935050505092915050565b60006020820190508181036000830152611f0d8184611e95565b905092915050565b611f1e816116c3565b82525050565b6000602082019050611f396000830184611f15565b92915050565b611f4881611826565b8114611f5357600080fd5b50565b600081359050611f6581611f3f565b92915050565b60008060408385031215611f8257611f81611699565b5b6000611f90858286016116ec565b9250506020611fa185828601611f56565b9150509250929050565b60008060408385031215611fc257611fc1611699565b5b6000611fd0858286016116ec565b9250506020611fe1858286016116ec565b9150509250929050565b600080600080600060a0868803121561200757612006611699565b5b6000612015888289016116ec565b9550506020612026888289016116ec565b945050604061203788828901611722565b935050606061204888828901611722565b925050608086013567ffffffffffffffff8111156120695761206861169e565b5b61207588828901611bfd565b9150509295509295909350565b60006020828403121561209857612097611699565b5b60006120a6848285016116ec565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b600061210b602a83611a23565b9150612116826120af565b604082019050919050565b6000602082019050818103600083015261213a816120fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061218857607f821691505b6020821081141561219c5761219b612141565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b60006121fe602e83611a23565b9150612209826121a2565b604082019050919050565b6000602082019050818103600083015261222d816121f1565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612290602983611a23565b915061229b82612234565b604082019050919050565b600060208201905081810360008301526122bf81612283565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061232f82611701565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612362576123616122f5565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123c9602683611a23565b91506123d48261236d565b604082019050919050565b600060208201905081810360008301526123f8816123bc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612435602083611a23565b9150612440826123ff565b602082019050919050565b6000602082019050818103600083015261246481612428565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006124c7602883611a23565b91506124d28261246b565b604082019050919050565b600060208201905081810360008301526124f6816124ba565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612559602583611a23565b9150612564826124fd565b604082019050919050565b600060208201905081810360008301526125888161254c565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006125eb602a83611a23565b91506125f68261258f565b604082019050919050565b6000602082019050818103600083015261261a816125de565b9050919050565b600061262c82611701565b915061263783611701565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561266c5761266b6122f5565b5b828201905092915050565b600060408201905081810360008301526126918185611e95565b905081810360208301526126a58184611e95565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061270a602983611a23565b9150612715826126ae565b604082019050919050565b60006020820190508181036000830152612739816126fd565b9050919050565b60006040820190506127556000830185611777565b6127626020830184611777565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061279082612769565b61279a8185612774565b93506127aa818560208601611a34565b6127b381611866565b840191505092915050565b600060a0820190506127d36000830188611f15565b6127e06020830187611f15565b81810360408301526127f28186611e95565b905081810360608301526128068185611e95565b9050818103608083015261281a8184612785565b90509695505050505050565b600081519050612835816117cd565b92915050565b60006020828403121561285157612850611699565b5b600061285f84828501612826565b91505092915050565b60008160e01c9050919050565b600060033d11156128945760046000803e612891600051612868565b90505b90565b600060443d10156128a75761292a565b6128af61168f565b60043d036004823e80513d602482011167ffffffffffffffff821117156128d757505061292a565b808201805167ffffffffffffffff8111156128f5575050505061292a565b80602083010160043d03850181111561291257505050505061292a565b612921826020018501866118a6565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000612989603483611a23565b91506129948261292d565b604082019050919050565b600060208201905081810360008301526129b88161297c565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000612a1b602883611a23565b9150612a26826129bf565b604082019050919050565b60006020820190508181036000830152612a4a81612a0e565b9050919050565b600060a082019050612a666000830188611f15565b612a736020830187611f15565b612a806040830186611777565b612a8d6060830185611777565b8181036080830152612a9f8184612785565b9050969550505050505056fea26469706673582212207a46a36cb63ef350ec0cf41e9b240c167f2cac29a7d4546d61aeacb6f6b4dfd964736f6c63430008090033