60806040523480156200001157600080fd5b506040518060400160405280600581526020017f4d794e46540000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e46540000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620000b8565b508060019080519060200190620000af929190620000b8565b505050620001cd565b828054620000c69062000197565b90600052602060002090601f016020900481019282620000ea576000855562000136565b82601f106200010557805160ff191683800117855562000136565b8280016001018555821562000136579182015b828111156200013557825182559160200191906001019062000118565b5b50905062000145919062000149565b5090565b5b80821115620001645760008160009055506001016200014a565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001b057607f821691505b60208210811415620001c757620001c662000168565b5b50919050565b61294480620001dd6000396000f3fe6080604052600436106100dd5760003560e01c806370a082311161007f578063b88d4fde11610059578063b88d4fde146102d0578063c87b56dd146102f9578063e985e9c514610336578063eacabe1414610373576100dd565b806370a082311461023f57806395d89b411461027c578063a22cb465146102a7576100dd565b8063095ea7b3116100bb578063095ea7b31461018757806323b872dd146101b057806342842e0e146101d95780636352211e14610202576100dd565b806301ffc9a7146100e257806306fdde031461011f578063081812fc1461014a575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190611914565b6103a3565b604051610116919061195c565b60405180910390f35b34801561012b57600080fd5b50610134610485565b6040516101419190611a10565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190611a68565b610517565b60405161017e9190611ad6565b60405180910390f35b34801561019357600080fd5b506101ae60048036038101906101a99190611b1d565b61055d565b005b3480156101bc57600080fd5b506101d760048036038101906101d29190611b5d565b610675565b005b3480156101e557600080fd5b5061020060048036038101906101fb9190611b5d565b6106d5565b005b34801561020e57600080fd5b5061022960048036038101906102249190611a68565b6106f5565b6040516102369190611ad6565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190611bb0565b6107a7565b6040516102739190611bec565b60405180910390f35b34801561028857600080fd5b5061029161085f565b60405161029e9190611a10565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190611c33565b6108f1565b005b3480156102dc57600080fd5b506102f760048036038101906102f29190611da8565b610907565b005b34801561030557600080fd5b50610320600480360381019061031b9190611a68565b610969565b60405161032d9190611a10565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190611e2b565b610a7c565b60405161036a919061195c565b60405180910390f35b61038d60048036038101906103889190611f0c565b610b10565b60405161039a9190611bec565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061046e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061047e575061047d82610b48565b5b9050919050565b60606000805461049490611f97565b80601f01602080910402602001604051908101604052809291908181526020018280546104c090611f97565b801561050d5780601f106104e25761010080835404028352916020019161050d565b820191906000526020600020905b8154815290600101906020018083116104f057829003601f168201915b5050505050905090565b600061052282610bb2565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610568826106f5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d09061203b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105f8610bfd565b73ffffffffffffffffffffffffffffffffffffffff161480610627575061062681610621610bfd565b610a7c565b5b610666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065d906120cd565b60405180910390fd5b6106708383610c05565b505050565b610686610680610bfd565b82610cbe565b6106c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bc9061215f565b60405180910390fd5b6106d0838383610d53565b505050565b6106f083838360405180602001604052806000815250610907565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561079e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610795906121cb565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f9061225d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461086e90611f97565b80601f016020809104026020016040519081016040528092919081815260200182805461089a90611f97565b80156108e75780601f106108bc576101008083540402835291602001916108e7565b820191906000526020600020905b8154815290600101906020018083116108ca57829003601f168201915b5050505050905090565b6109036108fc610bfd565b8383610fba565b5050565b610918610912610bfd565b83610cbe565b610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061215f565b60405180910390fd5b61096384848484611127565b50505050565b606061097482610bb2565b600060066000848152602001908152602001600020805461099490611f97565b80601f01602080910402602001604051908101604052809291908181526020018280546109c090611f97565b8015610a0d5780601f106109e257610100808354040283529160200191610a0d565b820191906000526020600020905b8154815290600101906020018083116109f057829003601f168201915b505050505090506000610a1e611183565b9050600081511415610a34578192505050610a77565b600082511115610a69578082604051602001610a519291906122b9565b60405160208183030381529060405292505050610a77565b610a728461119a565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000610b1c6007611202565b6000610b286007611218565b9050610b348482611226565b610b3e8184611400565b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610bbb81611474565b610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf1906121cb565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610c78836106f5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610cca836106f5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610d0c5750610d0b8185610a7c565b5b80610d4a57508373ffffffffffffffffffffffffffffffffffffffff16610d3284610517565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610d73826106f5565b73ffffffffffffffffffffffffffffffffffffffff1614610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc09061234f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e30906123e1565b60405180910390fd5b610e448383836114e0565b610e4f600082610c05565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e9f9190612430565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ef69190612464565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610fb58383836114e5565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090612506565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161111a919061195c565b60405180910390a3505050565b611132848484610d53565b61113e848484846114ea565b61117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490612598565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606111a582610bb2565b60006111af611183565b905060008151116111cf57604051806020016040528060008152506111fa565b806111d984611681565b6040516020016111ea9291906122b9565b6040516020818303038152906040525b915050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90612604565b60405180910390fd5b61129f81611474565b156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d690612670565b60405180910390fd5b6112eb600083836114e0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461133b9190612464565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46113fc600083836114e5565b5050565b61140982611474565b611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90612702565b60405180910390fd5b8060066000848152602001908152602001600020908051906020019061146f929190611805565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600061150b8473ffffffffffffffffffffffffffffffffffffffff166117e2565b15611674578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611534610bfd565b8786866040518563ffffffff1660e01b81526004016115569493929190612777565b602060405180830381600087803b15801561157057600080fd5b505af19250505080156115a157506040513d601f19601f8201168201806040525081019061159e91906127d8565b60015b611624573d80600081146115d1576040519150601f19603f3d011682016040523d82523d6000602084013e6115d6565b606091505b5060008151141561161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390612598565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611679565b600190505b949350505050565b606060008214156116c9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506117dd565b600082905060005b600082146116fb5780806116e490612805565b915050600a826116f4919061287d565b91506116d1565b60008167ffffffffffffffff81111561171757611716611c7d565b5b6040519080825280601f01601f1916602001820160405280156117495781602001600182028036833780820191505090505b5090505b600085146117d6576001826117629190612430565b9150600a8561177191906128ae565b603061177d9190612464565b60f81b818381518110611793576117926128df565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856117cf919061287d565b945061174d565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461181190611f97565b90600052602060002090601f016020900481019282611833576000855561187a565b82601f1061184c57805160ff191683800117855561187a565b8280016001018555821561187a579182015b8281111561187957825182559160200191906001019061185e565b5b509050611887919061188b565b5090565b5b808211156118a457600081600090555060010161188c565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118f1816118bc565b81146118fc57600080fd5b50565b60008135905061190e816118e8565b92915050565b60006020828403121561192a576119296118b2565b5b6000611938848285016118ff565b91505092915050565b60008115159050919050565b61195681611941565b82525050565b6000602082019050611971600083018461194d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119b1578082015181840152602081019050611996565b838111156119c0576000848401525b50505050565b6000601f19601f8301169050919050565b60006119e282611977565b6119ec8185611982565b93506119fc818560208601611993565b611a05816119c6565b840191505092915050565b60006020820190508181036000830152611a2a81846119d7565b905092915050565b6000819050919050565b611a4581611a32565b8114611a5057600080fd5b50565b600081359050611a6281611a3c565b92915050565b600060208284031215611a7e57611a7d6118b2565b5b6000611a8c84828501611a53565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ac082611a95565b9050919050565b611ad081611ab5565b82525050565b6000602082019050611aeb6000830184611ac7565b92915050565b611afa81611ab5565b8114611b0557600080fd5b50565b600081359050611b1781611af1565b92915050565b60008060408385031215611b3457611b336118b2565b5b6000611b4285828601611b08565b9250506020611b5385828601611a53565b9150509250929050565b600080600060608486031215611b7657611b756118b2565b5b6000611b8486828701611b08565b9350506020611b9586828701611b08565b9250506040611ba686828701611a53565b9150509250925092565b600060208284031215611bc657611bc56118b2565b5b6000611bd484828501611b08565b91505092915050565b611be681611a32565b82525050565b6000602082019050611c016000830184611bdd565b92915050565b611c1081611941565b8114611c1b57600080fd5b50565b600081359050611c2d81611c07565b92915050565b60008060408385031215611c4a57611c496118b2565b5b6000611c5885828601611b08565b9250506020611c6985828601611c1e565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611cb5826119c6565b810181811067ffffffffffffffff82111715611cd457611cd3611c7d565b5b80604052505050565b6000611ce76118a8565b9050611cf38282611cac565b919050565b600067ffffffffffffffff821115611d1357611d12611c7d565b5b611d1c826119c6565b9050602081019050919050565b82818337600083830152505050565b6000611d4b611d4684611cf8565b611cdd565b905082815260208101848484011115611d6757611d66611c78565b5b611d72848285611d29565b509392505050565b600082601f830112611d8f57611d8e611c73565b5b8135611d9f848260208601611d38565b91505092915050565b60008060008060808587031215611dc257611dc16118b2565b5b6000611dd087828801611b08565b9450506020611de187828801611b08565b9350506040611df287828801611a53565b925050606085013567ffffffffffffffff811115611e1357611e126118b7565b5b611e1f87828801611d7a565b91505092959194509250565b60008060408385031215611e4257611e416118b2565b5b6000611e5085828601611b08565b9250506020611e6185828601611b08565b9150509250929050565b600067ffffffffffffffff821115611e8657611e85611c7d565b5b611e8f826119c6565b9050602081019050919050565b6000611eaf611eaa84611e6b565b611cdd565b905082815260208101848484011115611ecb57611eca611c78565b5b611ed6848285611d29565b509392505050565b600082601f830112611ef357611ef2611c73565b5b8135611f03848260208601611e9c565b91505092915050565b60008060408385031215611f2357611f226118b2565b5b6000611f3185828601611b08565b925050602083013567ffffffffffffffff811115611f5257611f516118b7565b5b611f5e85828601611ede565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611faf57607f821691505b60208210811415611fc357611fc2611f68565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612025602183611982565b915061203082611fc9565b604082019050919050565b6000602082019050818103600083015261205481612018565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006120b7603e83611982565b91506120c28261205b565b604082019050919050565b600060208201905081810360008301526120e6816120aa565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612149602e83611982565b9150612154826120ed565b604082019050919050565b600060208201905081810360008301526121788161213c565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006121b5601883611982565b91506121c08261217f565b602082019050919050565b600060208201905081810360008301526121e4816121a8565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612247602983611982565b9150612252826121eb565b604082019050919050565b600060208201905081810360008301526122768161223a565b9050919050565b600081905092915050565b600061229382611977565b61229d818561227d565b93506122ad818560208601611993565b80840191505092915050565b60006122c58285612288565b91506122d18284612288565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612339602583611982565b9150612344826122dd565b604082019050919050565b600060208201905081810360008301526123688161232c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006123cb602483611982565b91506123d68261236f565b604082019050919050565b600060208201905081810360008301526123fa816123be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061243b82611a32565b915061244683611a32565b92508282101561245957612458612401565b5b828203905092915050565b600061246f82611a32565b915061247a83611a32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124af576124ae612401565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006124f0601983611982565b91506124fb826124ba565b602082019050919050565b6000602082019050818103600083015261251f816124e3565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000612582603283611982565b915061258d82612526565b604082019050919050565b600060208201905081810360008301526125b181612575565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006125ee602083611982565b91506125f9826125b8565b602082019050919050565b6000602082019050818103600083015261261d816125e1565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061265a601c83611982565b915061266582612624565b602082019050919050565b600060208201905081810360008301526126898161264d565b9050919050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b60006126ec602e83611982565b91506126f782612690565b604082019050919050565b6000602082019050818103600083015261271b816126df565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061274982612722565b612753818561272d565b9350612763818560208601611993565b61276c816119c6565b840191505092915050565b600060808201905061278c6000830187611ac7565b6127996020830186611ac7565b6127a66040830185611bdd565b81810360608301526127b8818461273e565b905095945050505050565b6000815190506127d2816118e8565b92915050565b6000602082840312156127ee576127ed6118b2565b5b60006127fc848285016127c3565b91505092915050565b600061281082611a32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561284357612842612401565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061288882611a32565b915061289383611a32565b9250826128a3576128a261284e565b5b828204905092915050565b60006128b982611a32565b91506128c483611a32565b9250826128d4576128d361284e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122060db2d1a5a8c64e4b7c891a714e8ea3766a2732c7fa8eee6c8ff65d1beb4603b64736f6c63430008090033