{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///BoxSdk.min.js","webpack:///webpack/bootstrap 023623fdf57bbcdd9182","webpack:///./src/config/box-constants.js","webpack:///./src/managers/manager.js","webpack:///./src/util/verify-required-values.js","webpack:///./src/util/normalize-object-keys.js","webpack:///./src/util/create-request-body.js","webpack:///./node_modules/rusha/dist/rusha.js","webpack:///./src/box-http.js","webpack:///./src/base-box-client.js","webpack:///./src/util/map-values.js","webpack:///./src/util/base64-array-buffer.js","webpack:///./src/util/check-for-file-reader.js","webpack:///./src/sdk.js","webpack:///external \"fetch\"","webpack:///./src/basic-box-client.js","webpack:///./src/managers/folders.js","webpack:///./src/util/investigate-modes.js","webpack:///./src/util/flatten-dotted-property-names.js","webpack:///./src/managers/files.js","webpack:///./src/managers/chunked-uploader.js","webpack:///./src/util/generate-sha1.js","webpack:///./src/util/generate-md5.js","webpack:///./src/util/check-for-form-data.js","webpack:///./src/managers/web-links.js","webpack:///./src/managers/collaborations.js","webpack:///./src/managers/collections.js","webpack:///./src/managers/comments.js","webpack:///./src/managers/groups.js","webpack:///./src/managers/metadata.js","webpack:///./src/managers/search.js","webpack:///./src/managers/tasks.js","webpack:///./src/managers/users.js","webpack:///./src/persistent-box-client.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE_12__","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","value","default","HEADER_AUTHORIZATION","HEADER_AUTHORIZATION_PREFIX","HTTP_VERBS","GET","POST","PUT","DELETE","OPTIONS","MODES","SKIP_VALIDATION","IGNORE_MODEL_VALUES","FOLDER","FOLDER_ID","FILE","FILE_ID","VERSION","VERSION_ID","COMMENT","COMMENT_ID","BOX_TOKEN_STORAGE_KEY","_interopRequireDefault","obj","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","_boxConstants","_boxConstants2","_investigateModes","_investigateModes2","_mapValues","_mapValues2","_flattenDottedPropertyNames","_flattenDottedPropertyNames2","_normalizeObjectKeys","_normalizeObjectKeys2","_verifyRequiredValues","_verifyRequiredValues2","_createRequestBody","_createRequestBody2","MODEL_VALUES","SHARED_LINK","SHARED_LINK_ACCESS","UNSHARED_AT","PERMISSIONS","CAN_DOWNLOAD","CAN_PREVIEW","Manager","client","values","ALL_VALUES","FLATTENED_VALUES","options","skipValidation","ignoreModelValues","body","requiredValuesString","join","Error","id","folderId","_getId","folder_id","folder","_testForMissingId","BOX_CONSTANTS","fileId","file_id","file","scope","templateKey","template","template_key","idType","correctlyFormattedIdProp","BASE_PATH","shared_link","_simpleMode","_setSkipValidation","_setIgnoreModelValues","apiPath","method","makeRequest","item","temp","map","requiredValue","indexOf","requiredValues","split","prop","NormalizeObjectKeys","keys","_typeof","splitCamel","regroup","push","toLowerCase","unshift","newKey","Symbol","iterator","constructor","RushaCore","_require","toHex","ceilHeapSize","conv","padlen","len","padZeroes","bin","h8","Uint8Array","buffer","om","align","padData","chunkLen","msgLen","getRawDigest","heap","padMaxChunkLen","io","Int32Array","out","arr","DataView","setInt32","Rusha","chunkSize","_offset","_maxChunkLen","_padMaxChunkLen","_heap","ArrayBuffer","_h32","_h8","Int8Array","_core","_initState","padMsgLen","_padChunk","padChunkLen","view","_write","data","chunkOffset","off","_coreCall","finalize","hash","rawDigest","str","byteLength","size","digest","digestFromString","digestFromBuffer","digestFromArrayBuffer","resetState","append","chunk","turnOffset","inputLen","Math","min","getState","slice","byteOffset","offset","setState","state","set","rawEnd","result","end","precomputedHex","Array","toString","arrayBuffer","binarray","res","_i","v","isDedicatedWorkerScope","isRunningInWorker","WorkerGlobalScope","isRunningInSharedWorker","SharedWorkerGlobalScope","isRunningInServiceWorker","ServiceWorkerGlobalScope","hashData","hasher","cb","e","hashFile","readTotal","blockSize","reader","FileReader","onloadend","error","readAsArrayBuffer","workerBehaviourEnabled","onmessage","event","done","err","postMessage","work","createHash","runWorker","isRunningInDedicatedWorker","disableWorkerBehaviour","createWorker","worker","terminate","URL","revokeObjectURL","objectURL","webpackBootstrapFunc","r","oe","console","f","ENTRY_MODULE","quoteRegExp","replace","getModuleDependencies","sources","queueName","retval","fnString","wrapperSignature","match","webpackRequireName","re","RegExp","dependencyRegExp","exec","moduleNameReqExp","hasValuesInQueues","queues","reduce","hasValues","getRequiredModules","modulesQueue","main","requiredModules","seenModules","queue","moduleToCheck","pop","newModules","newModulesKeys","j","concat","all","src","filter","forEach","entryModule","JSON","stringify","blob","window","Blob","type","bare","webkitURL","mozURL","msURL","workerUrl","createObjectURL","Worker","stdlib$846","foreign$847","heap$848","H$849","hash$850","k$851","x$852","i$853","j$854","y0$855","z0$856","y1$857","z1$858","y2$859","z2$860","y3$861","z3$862","y4$863","z4$864","t0$865","t1$866","_this","FileReaderSync","convStr","H8","H32","start","lm","charCodeAt","convBuf","buf","convBlob","Buffer","isBuffer","Hash","_rusha","update","encoding","BoxHttp","handleXMLHttpRequestErrors","statusText","headers","parseXHRHeaders","getAllResponseHeaders","responseText","response","parse","status","handleErrors","ok","json","catch","then","constructResponse","verbose","log","includeFullResponse","Promise","resolve","reject","buildResponse","retrieveHeaders","entries","iter","header","next","checkForJSONResponse","checkForDataResponse","headerStr","headerPairs","headerPair","index","substring","val","upload","XMLHttpRequest","uri","url","open","setRequestHeader","send","onload","onerror","useXHR","fetch","request","returnData","builtResponse","returnCancelToken","promise","abort","_folders","_folders2","_files","_files2","_webLinks","_webLinks2","_collaborations","_collaborations2","_collections","_collections2","_comments","_comments2","_groups","_groups2","_metadata","_metadata2","_search","_search2","_tasks","_tasks2","_users","_users2","_boxHttp","_boxHttp2","BaseBoxClient","config","Folders","Files","WebLinks","Collaborations","Collections","Comments","Groups","Metadata","Search","Tasks","Users","_baseApiUrl","baseUrl","_returnsOnlyOptions","noRequestMode","_skipValidation","simpleMode","_accessToken","_checkTokenType","_hasStoredAccessToken","_verbose","httpService","token","removeFromOptions","foundToken","accessToken","access_token","_constructHeaders","_constructAuthorizationHeader","assign","field","_isEmpty","params","fields","chunkedUpload","formattedOptions","encodeURIComponent","mode","$http","undefined","post","Base64ArrayBuffer","a","b","base64","encodings","bytes","byteRemainder","mainLength","_basicBoxClient","_basicBoxClient2","_persistentBoxClient","_persistentBoxClient2","SDK","_BasicBoxClient","BasicBoxClient","_PersistentBoxClient","PersistentBoxClient","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","_baseBoxClient","_baseBoxClient2","_BaseBoxClient","getPrototypeOf","path","_handleAuthorization","_applyFields","_checkForEmptyObjects","_formatOptions","returnsOnlyOptions","defaults","_handleAngularFileUpload","setAsNewAccessToken","removeAccessToken","_get","receiver","Function","desc","getOwnPropertyDescriptor","parent","_manager","_manager2","NAME","PARENT","ID","DESCRIPTION","PASSWORD","FOLDER_UPLOAD_EMAIL","FOLDER_UPLOAD_EMAIL_ACCESS","OWNED_BY","OWNED_BY_ID","SYNC_STATE","TAGS","_Manager","REQUIRED_VALUES","_getFolder","newName","collections","recursive","MODE_VALUES","runMode","apply","_chunkedUploader","_chunkedUploader2","_generateSha","_generateSha2","_generateMd","_generateMd2","_checkForFormData","_checkForFormData2","LOCK","UPLOAD_PATH","SIZE","DIMENSION_VALUES","MIN_HEIGHT","MAX_HEIGHT","MIN_WIDTH","MAX_WIDTH","DIMENSIONS","versionId","version_id","ChunkedUploader","parentFolder","listeners","startSession","_this2","formData","preflightOptions","decorateOptions","preflightCheck","resp","upload_url","md5","_this3","preflightCheckNewFileVersion","uploadNewFileVersion","_getFile","extension","_getVersionId","parentId","lock","_base64ArrayBuffer","_base64ArrayBuffer2","_rusha2","START_CANCELLING_EVENT_NAME","ABORT_UPLOAD_EVENT_NAME","filesManager","fileName","newVersionFileId","rusha","parts","tasks","partRequestCancellations","session","endpoints","listParts","commit","uploadPart","expiresAt","partSize","totalParts","fileDigest","getFailureNotification","getSuccessNotification","getStartNotification","getFileCommitNotification","getFileCommitRetryNotification","getCompletedNotification","getIsCancellingNotification","getIsCancelledNotification","handleProgressUpdates","progress","isCancelled","isComplete","didStart","didFail","didSucceed","didFileCommit","didSessionStart","percentageProcessed","percentageUploaded","fileCommitRetryTime","retry","uploadCount","processedCount","finishedCancelling","finishedUploading","retryCommitTimer","abortUpload","evt","clearTimeout","part","fireEvent","fireEndCancellingEvent","endSession","addEventListener","removeListeners","removeEventListener","eventName","CustomEvent","detail","bubbles","cancelable","dispatchEvent","addListeners","file_size","file_name","session_expires_at","part_size","total_parts","session_endpoints","list_parts","upload_part","makeChunks","processChunks","commitUpload","message","totalSize","position","contentRangeHigh","contentRange","uploaded","createSHA1Hash","shaObject","toFixed","Digest","Content-Range","Content-Type","opts","defer","canceller","cancel","reason","put","timeout","processChunk","calculatedHash","preorderedParts","orderedParts","retrySeconds","delay","t","setTimeout","_checkForFileReader","_checkForFileReader2","FormData","webLink","web_link","webLinkId","web_link_id","_getWebLinkId","InvestigateModes","_getWebLink","NOTIFY","ITEM","ITEM_TYPE","ITEM_ID","ACCESSIBLE_BY","ACCESSIBLE_BY_ID","ACCESSIBLE_BY_TYPE","ACCESSIBLE_BY_LOGIN","ROLE","collaborationId","collaboration_id","collaboration","comment","_getCollaborationId","_getCollaboration","collectionId","collection_id","collection","_getCollectionId","TAGGED_MESSAGE","MESSAGE","commentId","comment_id","_getCommentId","_getComment","PROVENANCE","EXTERNAL_SYNC_IDENTIFIER","INVITABILITY_LEVEL","MEMBER_VIEWABILITY_LEVEL","USER","USER_ID","GROUP","GROUP_ID","groupId","group_id","group","groupMembershipId","group_membership_id","groupMembership","group_membership","CreateRequestBody","_getGroupId","_getGroup","_getGroupMembershipId","BASE_MEMBERSHIP_PATH","_getGroupMembership","BASE_PATH_FOLDER_METADATA","BASE_PATH_FILE_METADATA","query","_objectifyStringWithQuery","_getQuery","TASK","TASK_TYPE","TASK_ID","ASSIGN_TO","ASSIGN_TO_ID","ASSIGN_TO_LOGIN","RESOLUTION_STATE","ACTION","DUE_AT","taskId","task_id","task","taskAssignment","task_assignment","taskAssignmentId","task_assignment_id","_getTaskId","_getTask","_getTaskAssignmentId","BASE_TASK_ASSIGNMENT_PATH","_getTaskAssignment","userId","_tokenExpirationTime","tokenExpirationTime","accessTokenHandler","_checkConfigForAccessTokenHandler","accessTokenStore","_defaultAccessTokenStore","storage","disableStorage","isCallback","isPromise","requestRetryTimes","retryTimes","supportsStorage","_storageAvailable","suppressExpiration","access_token_handler","accessTokenObject","x","setItem","removeItem","verifiedAccessTokenObject","_calculateTokenExpiration","expires_at","Date","now","isAccessTokenHandlerAPromise","_promisifyAccessTokenHandler","_verifyAccessTokenObject","requestRetryCount","boxToken","getItem","_isExpired","retrieveToken","compiledOptions","_this4","reauth"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,UACA,kBAAAC,gBAAAC,IACAD,OAAA,mBAAAJ,GACA,gBAAAC,SACAA,QAAA,OAAAD,EAAAG,QAAA,UAEAJ,EAAA,OAAAC,EAAAD,EAAA,QACC,mBAAAO,WAAAC,KAAA,SAAAC,GACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAV,OAGA,IAAAC,GAAAU,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAb,WAUA,OANAQ,GAAAE,GAAAI,KAAAb,EAAAD,QAAAC,IAAAD,QAAAS,GAGAR,EAAAY,GAAA,EAGAZ,EAAAD,QAvBA,GAAAW,KA4DA,OAhCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAAAjB,EAAAkB,EAAAC,GACAV,EAAAW,EAAApB,EAAAkB,IACAG,OAAAC,eAAAtB,EAAAkB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAzB,GACA,GAAAkB,GAAAlB,KAAA0B,WACA,WAA2B,MAAA1B,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAQ,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDpB,EAAAuB,EAAA,GAGAvB,IAAAwB,EAAA,MDgBM,SAAUhC,EAAQD,EAASS,GAEjC,YAGAY,QAAOC,eAAetB,EAAS,cAC7BkC,OAAO,IAETlC,EAAQmC,SEpFNC,qBAAsB,gBACtBC,4BAA6B,UAC7BC,YACEC,IAAK,MACLC,KAAM,OACNC,IAAK,MACLC,OAAQ,SACRC,QAAS,WAEXC,OACEC,gBAAiB,iBACjBC,oBAAqB,qBAEvBC,OAAQ,SACRC,UAAW,WACXC,KAAM,OACNC,QAAS,SACTC,QAAS,UACTC,WAAY,YACZC,QAAS,UACTC,WAAY,YACZC,sBAAuB,aFuFzBtD,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAqCA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCApChHxC,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MGzHhiBY,EAAA/D,EAAA,GH6HIgE,EAAiBjB,EAAuBgB,GG5H5CE,EAAAjE,EAAA,IHgIIkE,EAAqBnB,EAAuBkB,GG/HhDE,EAAAnE,EAAA,GHmIIoE,EAAcrB,EAAuBoB,GGlIzCE,EAAArE,EAAA,IHsIIsE,EAA+BvB,EAAuBsB,GGrI1DE,EAAAvE,EAAA,GHyIIwE,EAAwBzB,EAAuBwB,GGxInDE,EAAAzE,EAAA,GH4II0E,EAAyB3B,EAAuB0B,GG3IpDE,EAAA3E,EAAA,GH+II4E,EAAsB7B,EAAuB4B,GG7I3CE,GACJC,YAAa,cACbC,mBAAoB,qBACpBC,YAAa,0BACbC,YAAa,0BACbC,aAAc,uCACdC,YAAa,uCAGMC,EHmJP,WGlJZ,QAAAA,GAAYC,EAAQC,GAAQrC,EAAApD,KAAAuF,GAC1BvF,KAAKwF,OAASA,EACdxF,KAAK0F,WAAcD,GAAU,EAAAlB,EAAA1C,SAAU4D,GAAU,KACjDzF,KAAK2F,iBAAoB3F,KAAK0F,YAAc,EAAAjB,EAAA5C,SAAgB7B,KAAK0F,YAAc,KHqSjF,MA7IAlC,GAAa+B,IACXxB,IAAK,YACLnC,MAAO,SGvJCgE,EAASH,EAAQI,EAAgBC,GACzC,GAAIF,EAAQG,KACLF,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQG,KAAMN,GACrDK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQG,KAAM/F,KAAK2F,sBAC5D,KAAIC,EAIJ,CACLH,EAASA,GAAUzF,KAAK0F,UACxB,IAAIM,GAAuBP,EAAOQ,KAAK,KACvC,MAAM,IAAIC,OAAJ,sEAAgFF,GANjFH,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAASH,GAChDK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAS5F,KAAK2F,kBAC5DC,EAAQG,MAAO,EAAAhB,EAAAlD,SAAkB+D,EAAS5F,KAAK0F,WAAYI,OHuK7D/B,IAAK,mBACLnC,MAAO,SGhKQgE,GACf,GAAuB,gBAAZA,GAAsB,CAE/BA,GAAYO,GADHP,GAGX,MAAOA,MHmKP7B,IAAK,SACLnC,MAAO,SGjKFgE,GACL,GAAIO,GAAK,EAQT,OAPIP,GAAQO,IACVA,EAAKP,EAAQO,SACNP,GAAQO,IACa,gBAAZP,KAChBO,EAAKP,EACLA,MAEKO,KHoKPpC,IAAK,eACLnC,MAAO,SGlKIgE,GACX,GAAIQ,GAAWpG,KAAKqG,OAAOT,EAQ3B,OAPIA,GAAQQ,UAAYR,EAAQU,WAC9BF,EAAWR,EAAQQ,UAAYR,EAAQU,UACtCV,EAAQQ,eAAmBR,GAAQQ,eAAkBR,GAAQU,WACrDV,EAAQW,QAAUX,EAAQW,OAAOJ,KAC1CC,EAAWR,EAAQW,OAAOJ,IAE5BnG,KAAKwG,kBAAkBJ,EAAUK,UAAchE,OAAQgE,UAAc/D,WAC9D0D,KHqKPrC,IAAK,aACLnC,MAAO,SGnKEgE,GACT,GAAIc,GAAS1G,KAAKqG,OAAOT,EAQzB,OAPIA,GAAQc,QAAUd,EAAQe,SAC5BD,EAASd,EAAQc,QAAUd,EAAQe,QAClCf,EAAQc,aAAiBd,GAAQc,aAAgBd,GAAQe,SACjDf,EAAQgB,MAAQhB,EAAQgB,KAAKT,KACtCO,EAASd,EAAQgB,KAAKT,IAExBnG,KAAKwG,kBAAkBE,EAAQD,UAAc9D,KAAM8D,UAAc7D,SAC1D8D,KHsKP3C,IAAK,YACLnC,MAAO,SGpKCgE,GACR,GAAIiB,GAAQ,YAKZ,OAJIjB,GAAQiB,OAA2B,KAAlBjB,EAAQiB,QAC3BA,EAAQjB,EAAQiB,YACTjB,GAAQiB,OAEVA,KHuKP9C,IAAK,kBACLnC,MAAO,SGrKOgE,GACd,GAAIkB,GAAc,EAQlB,OAPIlB,GAAQmB,UAAiC,KAArBnB,EAAQmB,UAC9BD,EAAwC,KAAzBlB,EAAQmB,SAAShD,IAAc6B,EAAQmB,SAAShD,IAAM6B,EAAQmB,eACtEnB,GAAQmB,WACNnB,EAAQkB,aAAelB,EAAQoB,gBACxCF,EAAclB,EAAQkB,aAAelB,EAAQoB,aAC5CpB,EAAQkB,kBAAsBlB,GAAQkB,kBAAqBlB,GAAQoB,cAE/DF,KHwKP/C,IAAK,oBACLnC,MAAO,SGtKSuE,EAAIc,EAAQC,GAG5B,GAFAD,EAASA,GAAU,UACnBC,EAA2BA,GAA4B,UAC5C,KAAPf,EACF,KAAM,IAAID,OAAJ,QAAkBe,EAAlB,sGAA8HC,MH0KtInD,IAAK,qBACLnC,MAAO,SGvKUgE,GACjB,OAAO,EAAAvB,EAAAxC,SAAiB+D,EAASa,UAAcnE,MAAMC,mBAAoB,KH0KzEwB,IAAK,wBACLnC,MAAO,SGxKagE,GACpB,OAAO,EAAAvB,EAAAxC,SAAiB+D,EAASa,UAAcnE,MAAME,uBAAwB,KH2K7EuB,IAAK,oBACLnC,MAAO,SGzKSgE,EAASO,EAAIgB,EAAWxB,GAKxC,GAJAC,EAAUA,MACVA,EAAQG,KAAOH,EAAQG,SACvBH,EAAQG,KAAKqB,YAAcxB,EAAQG,KAAKqB,iBAEnCpH,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,GAAiB7F,KAAKsH,mBAAmB1B,EACrB5F,MAAKuH,sBAAsB3B,KAEzB,EAAAjB,EAAA9C,SAAoB+D,EAASD,GAClDE,GACCD,EAAQZ,EAAaC,eACvBW,EAAQG,KAAKf,EAAaC,aAAeW,EAAQZ,EAAaC,mBACvDW,GAAQZ,EAAaC,cAIlC,GAAIuC,GAAaL,EAAb,IAA0BhB,CAE9B,OADAP,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,OH+KnCL,IAGT7F,GAAQmC,QG5Sa0D,EH6SrB5F,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAGAY,QAAOC,eAAetB,EAAS,cAC7BkC,OAAO,IAGTlC,EAAQmC,QI5UO,SAAC8F,EAAMlC,GAEpB,GADAA,EAASA,MACa,IAAlBA,EAAO7B,OAAX,CAGA,GAAIgE,GAAOD,CACXlC,GAAOoC,IAAI,SAACC,GACV,IAAoC,IAAhCA,EAAcC,QAAQ,KAAa,CAErC,IAAK,GADDC,GAAiBF,EAAcG,MAAM,KAChC3H,EAAI,EAAGC,EAAIyH,EAAepE,OAAQtD,EAAIC,EAAGD,IAAK,CACrD,GAAI4H,GAAOF,EAAe1H,EACtBsH,GAAKnG,eAAeyG,KACtBN,EAAOA,EAAKM,IAGhB,IAAKN,EAAQ,KAAM,IAAI1B,OAAJ,QAAkB4B,EAAlB,4CACd,KAAKH,EAAKG,GACf,KAAM,IAAI5B,OAAJ,QAAkB4B,EAAlB,4CJmVZnI,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YKzWe,SAASgI,GAAoBvC,EAASH,GACnDA,EAASA,MAET1E,OAAOqH,KAAKxC,GAASiC,IAAI,SAAC9D,GACxB,IAA6B,IAAzB0B,EAAOsC,QAAQhE,GAAnB,CAG4B,WAAxBsE,EAAOzC,EAAQ7B,KACjBoE,EAAoBvC,EAAQ7B,GAAM0B,EAGpC,IAAI6C,GAAavE,EAAIkE,MAAM,aAE3B,IAAIK,EAAW1E,OAAS,EAAG,CAEzB,IAAK,GADD2E,MACKjI,EAAI,EAAGA,EAAIgI,EAAW1E,OAAQtD,IACrCiI,EAAQC,KAAKF,EAAWhI,GAAGmI,cAEzBH,GAAW1E,OAAS,GAAK2E,EAAQG,QAAQJ,EAAW,GACxD,IAAIK,GAASJ,EAAQtC,KAAK,MAEM,IAA5BR,EAAOsC,QAAQY,KAEjB/C,EAAQ+C,GAAU/C,EAAQ7B,SACnB6B,GAAQ7B,QLoVvBhD,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAIyG,GAA4B,kBAAXO,SAAoD,gBAApBA,QAAOC,SAAwB,SAAU1F,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXyF,SAAyBzF,EAAI2F,cAAgBF,QAAUzF,IAAQyF,OAAOpH,UAAY,eAAkB2B,GAEtQzD,GAAQmC,QKlXgBsG,ELkZxBxI,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAGAY,QAAOC,eAAetB,EAAS,cAC7BkC,OAAO,IAGTlC,EAAQmC,QMhaO,SAAC+D,EAASH,EAAQK,GAI/B,MAHAA,GAAoBA,IAAqB,EACzCL,EAASA,MAELK,GACF/E,OAAOqH,KAAKxC,GAASiC,IAAI,SAAC9D,GACZ,SAARA,IACF6B,EAAQG,KAAKhC,GAAO6B,EAAQ7B,SACrB6B,GAAQ7B,MAGZ6B,EAAQG,MAGK,IAAlBN,EAAO7B,SAAsC,IAAtBkC,MAI3BF,EAAQG,KAAOH,EAAQG,SACvBhF,OAAOqH,KAAKxC,GAASiC,IAAI,SAAC9D,IACK,IAAzB0B,EAAOsC,QAAQhE,IACL,SAARA,IACF6B,EAAQG,KAAKhC,GAAO6B,EAAQ7B,SACrB6B,GAAQ7B,MAId6B,EAAQG,ONmajBpG,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,IOlcjC,SAAAX,EAAAC,GAEAE,EAAAD,QAAAD,KAOC,mBAAAM,YAAA,WACD,gBAAAG,GAKA,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAV,OAGA,IAAAC,GAAAU,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAb,WAUA,OANAQ,GAAAE,GAAAI,KAAAb,EAAAD,QAAAC,IAAAD,QAAAS,GAGAR,EAAAY,GAAA,EAGAZ,EAAAD,QAvBA,GAAAW,KA4DA,OAhCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAAAjB,EAAAkB,EAAAC,GACAV,EAAAW,EAAApB,EAAAkB,IACAG,OAAAC,eAAAtB,EAAAkB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAzB,GACA,GAAAkB,GAAAlB,KAAA0B,WACA,WAAmC,MAAA1B,GAAA,SACnC,WAAyC,MAAAA,GAEzC,OADAQ,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAQ,EAAAC,GAA8D,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAG9DpB,EAAAuB,EAAA,GAGAvB,IAAAwB,EAAA,KAKA,SAAAhC,EAAAD,EAAAS,GAEA,QAAAiD,GAAAC,EAAAC,GAAiD,KAAAD,YAAAC,IAA0C,SAAAC,WAAA,qCAI3F,GAAAwF,GAAA5I,EAAA,GAEA6I,EAAA7I,EAAA,GACA8I,EAAAD,EAAAC,MACAC,EAAAF,EAAAE,aAEAC,EAAAhJ,EAAA,GAIAiJ,EAAA,SAAAC,GACA,IAAAA,GAAA,EAAgBA,EAAA,KAAcA,GAAA,GAC9B,MAAAA,IAGAC,EAAA,SAAAC,EAAAF,GACA,GAAAG,GAAA,GAAAC,YAAAF,EAAAG,QACAC,EAAAN,EAAA,EACAO,EAAAP,EAAAM,CACA,QAAAA,GACA,OACAH,EAAAI,EAAA,IACA,QACAJ,EAAAI,EAAA,IACA,QACAJ,EAAAI,EAAA,IACA,QACAJ,EAAAI,EAAA,KAEA,OAAAtJ,GAAA,GAAA+I,GAAA,GAA8B/I,EAAAiJ,EAAA3F,OAAgBtD,IAC9CiJ,EAAAjJ,GAAA,GAIAuJ,EAAA,SAAAN,EAAAO,EAAAC,GACAR,EAAAO,GAAA,aAAAA,EAAA,MAGAP,EAAA,OAAAO,GAAA,SAAAC,GAAA,SACAR,EAAA,OAAAO,GAAA,SAAAC,GAAA,GAGAC,EAAA,SAAAC,EAAAC,GACA,GAAAC,GAAA,GAAAC,YAAAH,EAAAC,EAAA,OACAG,EAAA,GAAAD,YAAA,GACAE,EAAA,GAAAC,UAAAF,EAAAX,OAMA,OALAY,GAAAE,SAAA,EAAAL,EAAA,OACAG,EAAAE,SAAA,EAAAL,EAAA,OACAG,EAAAE,SAAA,EAAAL,EAAA,OACAG,EAAAE,SAAA,GAAAL,EAAA,OACAG,EAAAE,SAAA,GAAAL,EAAA,OACAE,GAGAI,EAAA,WACA,QAAAA,GAAAC,GAIA,GAHAtH,EAAApD,KAAAyK,IAEAC,KAAA,OACA,KACA,SAAAxE,OAAA,2CAEAlG,MAAA2K,QAAA,EACA3K,KAAA4K,aAAAF,EACA1K,KAAA6K,gBAAAzB,EAAAsB,GAKA1K,KAAA8K,MAAA,GAAAC,aAAA7B,EAAAlJ,KAAA6K,gBAAA,SACA7K,KAAAgL,KAAA,GAAAZ,YAAApK,KAAA8K,OACA9K,KAAAiL,IAAA,GAAAC,WAAAlL,KAAA8K,OACA9K,KAAAmL,MAAA,GAAApC,IAAgCqB,0BAA6BpK,KAAA8K,OA+H7D,MA5HAL,GAAAjJ,UAAA4J,WAAA,SAAAnB,EAAAoB,GACArL,KAAA2K,QAAA,CACA,IAAAR,GAAA,GAAAC,YAAAH,EAAAoB,EAAA,MACAlB,GAAA,cACAA,EAAA,cACAA,EAAA,eACAA,EAAA,aACAA,EAAA,gBAGAM,EAAAjJ,UAAA8J,UAAA,SAAAxB,EAAAC,GACA,GAAAwB,GAAAnC,EAAAU,GACA0B,EAAA,GAAApB,YAAApK,KAAA8K,MAAA,EAAAS,GAAA,EAGA,OAFAjC,GAAAkC,EAAA1B,GACAD,EAAA2B,EAAA1B,EAAAC,GACAwB,GAGAd,EAAAjJ,UAAAiK,OAAA,SAAAC,EAAAC,EAAA7B,EAAA8B,GACAzC,EAAAuC,EAAA1L,KAAAiL,IAAAjL,KAAAgL,KAAAW,EAAA7B,EAAA8B,GAAA,IAGAnB,EAAAjJ,UAAAqK,UAAA,SAAAH,EAAAC,EAAA7B,EAAAC,EAAA+B,GACA,GAAAP,GAAAzB,CACA9J,MAAAyL,OAAAC,EAAAC,EAAA7B,GACAgC,IACAP,EAAAvL,KAAAsL,UAAAxB,EAAAC,IAEA/J,KAAAmL,MAAAY,KAAAR,EAAAvL,KAAA6K,kBAGAJ,EAAAjJ,UAAAwK,UAAA,SAAAC,GACA,GAAAlC,GAAAkC,EAAAC,YAAAD,EAAArI,QAAAqI,EAAAE,MAAA,CACAnM,MAAAoL,WAAApL,KAAA8K,MAAA9K,KAAA6K,gBACA,IAAAc,GAAA,EACA7B,EAAA9J,KAAA4K,YACA,KAAAe,EAAA,EAAyB5B,EAAA4B,EAAA7B,EAAiC6B,GAAA7B,EAC1D9J,KAAA6L,UAAAI,EAAAN,EAAA7B,EAAAC,GAAA,EAGA,OADA/J,MAAA6L,UAAAI,EAAAN,EAAA5B,EAAA4B,EAAA5B,GAAA,GACAC,EAAAhK,KAAA8K,MAAA9K,KAAA6K,kBAGAJ,EAAAjJ,UAAA4K,OAAA,SAAAH,GACA,MAAAhD,GAAAjJ,KAAAgM,UAAAC,GAAAvC,SAGAe,EAAAjJ,UAAA6K,iBAAA,SAAAJ,GACA,MAAAjM,MAAAoM,OAAAH,IAGAxB,EAAAjJ,UAAA8K,iBAAA,SAAAL,GACA,MAAAjM,MAAAoM,OAAAH,IAGAxB,EAAAjJ,UAAA+K,sBAAA,SAAAN,GACA,MAAAjM,MAAAoM,OAAAH,IAGAxB,EAAAjJ,UAAAgL,WAAA,WAEA,MADAxM,MAAAoL,WAAApL,KAAA8K,MAAA9K,KAAA6K,iBACA7K,MAGAyK,EAAAjJ,UAAAiL,OAAA,SAAAC,GACA,GAAAf,GAAA,EACA7B,EAAA4C,EAAAR,YAAAQ,EAAA9I,QAAA8I,EAAAP,MAAA,EACAQ,EAAA3M,KAAA2K,QAAA3K,KAAA4K,aACAgC,MAAA,EAGA,KADA5M,KAAA2K,SAAAb,EACA6B,EAAA7B,GACA8C,EAAAC,KAAAC,IAAAhD,EAAA6B,EAAA3L,KAAA4K,aAAA+B,GACA3M,KAAAyL,OAAAiB,EAAAf,EAAAiB,EAAAD,GACAA,GAAAC,EACAjB,GAAAiB,EACAD,IAAA3M,KAAA4K,eACA5K,KAAAmL,MAAAY,KAAA/L,KAAA4K,aAAA5K,KAAA6K,iBACA8B,EAAA,EAGA,OAAA3M,OAGAyK,EAAAjJ,UAAAuL,SAAA,WACA,GAAAJ,GAAA3M,KAAA2K,QAAA3K,KAAA4K,aACAX,MAAA,EACA,IAAA0C,EAIA1C,EAAAjK,KAAA8K,MAAAkC,MAAA,OAJA,CACA,GAAA7C,GAAA,GAAAC,YAAApK,KAAA8K,MAAA9K,KAAA6K,gBAAA,MACAZ,GAAAE,EAAAT,OAAAsD,MAAA7C,EAAA8C,WAAA9C,EAAA8C,WAAA9C,EAAA+B,YAIA,OACAgB,OAAAlN,KAAA2K,QACAV,SAIAQ,EAAAjJ,UAAA2L,SAAA,SAAAC,GAEA,GADApN,KAAA2K,QAAAyC,EAAAF,OACA,KAAAE,EAAAnD,KAAAiC,WAAA,CACA,GAAA9B,YAAApK,KAAA8K,MAAA9K,KAAA6K,gBAAA,OACAwC,IAAA,GAAAjD,YAAAgD,EAAAnD,WAEAjK,MAAAgL,KAAAqC,IAAA,GAAAjD,YAAAgD,EAAAnD,MAEA,OAAAjK,OAGAyK,EAAAjJ,UAAA8L,OAAA,WACA,GAAAvD,GAAA/J,KAAA2K,QACAb,EAAAC,EAAA/J,KAAA4K,aACAW,EAAAvL,KAAAsL,UAAAxB,EAAAC,EACA/J,MAAAmL,MAAAY,KAAAR,EAAAvL,KAAA6K,gBACA,IAAA0C,GAAAvD,EAAAhK,KAAA8K,MAAA9K,KAAA6K,gBAEA,OADA7K,MAAAoL,WAAApL,KAAA8K,MAAA9K,KAAA6K,iBACA0C,GAGA9C,EAAAjJ,UAAAgM,IAAA,WACA,MAAAvE,GAAAjJ,KAAAsN,SAAA5D,SAGAe,IAGA9K,GAAAD,QAAA+K,EACA9K,EAAAD,QAAAyL,MAAApC,GAIA,SAAApJ,EAAAD,GASA,OADA+N,GAAA,GAAAC,OAAA,KACApN,EAAA,EAAeA,EAAA,IAASA,IACxBmN,EAAAnN,MAAA,WAAAA,EAAAqN,SAAA,GAGAhO,GAAAD,QAAAuJ,MAAA,SAAA2E,GAGA,OAFAC,GAAA,GAAApE,YAAAmE,GACAE,EAAA,GAAAJ,OAAAE,EAAA1B,YACA6B,EAAA,EAAkBA,EAAAD,EAAAlK,OAAiBmK,IACnCD,EAAAC,GAAAN,EAAAI,EAAAE,GAEA,OAAAD,GAAA7H,KAAA,KAOAtG,EAAAD,QAAAwJ,aAAA,SAAA8E,GAKA,GAAAtM,GAAA,CAGA,IAAAsM,GAAA,kBAGA,IAAAA,EAAA,SACA,IAAAtM,EAAA,EAAeA,EAAAsM,EAAOtM,IAAA,OAEtB,KAAAA,EAAA,SAAsBA,EAAAsM,EAAOtM,GAAA,UAE7B,MAAAA,IAOA/B,EAAAD,QAAAuO,uBAAA,SAAAlO,GACA,GAAAmO,GAAA,qBAAAnO,mBAAAoO,kBACAC,EAAA,2BAAArO,mBAAAsO,wBACAC,EAAA,4BAAAvO,mBAAAwO,wBAWA,OAAAL,KAAAE,IAAAE,IAKA,SAAA3O,EAAAD,EAAAS,GAIAR,EAAAD,QAAA,WACA,GAAA+K,GAAAtK,EAAA,GAEAqO,EAAA,SAAAC,EAAA/C,EAAAgD,GACA,IACA,MAAAA,GAAA,KAAAD,EAAArC,OAAAV,IACK,MAAAiD,GACL,MAAAD,GAAAC,KAIAC,EAAA,SAAAH,EAAAI,EAAAC,EAAAlI,EAAA8H,GACA,GAAAK,GAAA,GAAAhP,MAAAiP,UACAD,GAAAE,UAAA,WACA,GAAAF,EAAAG,MACA,MAAAR,GAAAK,EAAAG,MAEA,IAAAxF,GAAAqF,EAAAxB,MACAsB,IAAAE,EAAAxB,OAAArB,UACA,KACAuC,EAAAhC,OAAA/C,GACO,MAAAiF,GAEP,WADAD,GAAAC,GAGAE,EAAAjI,EAAAuF,KACAyC,EAAAH,EAAAI,EAAAC,EAAAlI,EAAA8H,GAEAA,EAAA,KAAAD,EAAAjB,QAGAuB,EAAAI,kBAAAvI,EAAAoG,MAAA6B,IAAAC,KAGAM,GAAA,CA0BA,OAxBArP,MAAAsP,UAAA,SAAAC,GACA,GAAAF,EAAA,CAIA,GAAA1D,GAAA4D,EAAA5D,UACA9E,EAAA0I,EAAA5D,KAAA9E,KACAT,EAAAmJ,EAAA5D,KAAAvF,EACA,aAAAA,IACAS,GAAA8E,GAAA,CACA,GAAAoD,GAAAQ,EAAA5D,KAAAoD,WAAA,QACAL,EAAA,GAAAhE,GAAAqE,EACAL,GAAAjC,YACA,IAAA+C,GAAA,SAAAC,EAAAzD,GACAyD,EAGAzP,KAAA0P,aAA0BtJ,KAAA+I,MAAAM,EAAA5O,OAF1Bb,KAAA0P,aAA0BtJ,KAAA4F,SAK1BL,IAAA8C,EAAAC,EAAA/C,EAAA6D,GACA3I,GAAAgI,EAAAH,EAAA,EAAAK,EAAAlI,EAAA2I,MAGA,WACAH,GAAA,KAMA,SAAAzP,EAAAD,EAAAS,GAIA,GAAAuP,GAAAvP,EAAA,GACAsK,EAAAtK,EAAA,GACAwP,EAAAxP,EAAA,GACAyP,EAAAzP,EAAA,GAEA6I,EAAA7I,EAAA,GACA8N,EAAAjF,EAAAiF,uBAEA4B,EAAA,mBAAA9P,OAAAkO,EAAAlO,KAEA0K,GAAAqF,uBAAAD,EAAAD,IAAA,aAEAnF,EAAAsF,aAAA,WACA,GAAAC,GAAAN,EAAA,GACAO,EAAAD,EAAAC,SAKA,OAJAD,GAAAC,UAAA,WACAC,IAAAC,gBAAAH,EAAAI,WACAH,EAAAzP,KAAAwP,IAEAA,GAGAvF,EAAAkF,aAEAhQ,EAAAD,QAAA+K,GAIA,SAAA9K,EAAAD,EAAAS,GAEA,QAAAkQ,GAAAnQ,GAKA,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAV,OAGA,IAAAC,GAAAU,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAb,WAUA,OANAQ,GAAAE,GAAAI,KAAAb,EAAAD,QAAAC,IAAAD,QAAAS,GAGAR,EAAAY,GAAA,EAGAZ,EAAAD,QAvBA,GAAAW,KA2BAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAG,EAAA,SAAAsB,GAAmD,MAAAA,IAGnDzB,EAAAQ,EAAA,SAAAjB,EAAAkB,EAAAC,GACAV,EAAAW,EAAApB,EAAAkB,IACAG,OAAAC,eAAAtB,EAAAkB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAmQ,EAAA,SAAA5Q,GACAqB,OAAAC,eAAAtB,EAAA,cAA0DkC,OAAA,KAI1DzB,EAAAiB,EAAA,SAAAzB,GACA,GAAAkB,GAAAlB,KAAA0B,WACA,WAAqC,MAAA1B,GAAA,SACrC,WAA2C,MAAAA,GAE3C,OADAQ,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAQ,EAAAC,GAA8D,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAG9DpB,EAAAuB,EAAA,IAGAvB,EAAAoQ,GAAA,SAAAf,GAAsE,KAApBgB,SAAAtB,MAAAM,GAAoBA,EAEtE,IAAAiB,GAAAtQ,IAAAwB,EAAA+O,aACA,OAAAD,GAAA5O,SAAA4O,EAOA,QAAAE,GAAA1E,GACA,OAAAA,EAAA,IAAA2E,QAAA,uBAA6C,QAG7C,QAAAC,GAAAC,EAAAnR,EAAAoR,GACA,GAAAC,KACAA,GAAAD,KAEA,IAAAE,GAAAtR,EAAAgO,WACAuD,EAAAD,EAAAE,MAAA,sCACA,KAAAD,EAAA,MAAAF,EAMA,KALA,GAIAG,GAJAC,EAAAF,EAAA,GAGAG,EAAA,GAAAC,QAAA,cAAAX,EAAAS,GAAAG,EAAA,KAEAJ,EAAAE,EAAAG,KAAAP,IACA,kBAAAE,EAAA,IACAH,EAAAD,GAAAvI,KAAA2I,EAAA,GAKA,KADAE,EAAA,GAAAC,QAAA,MAAAX,EAAAS,GAAA,yBAAAK,EAAA,YAAAF,EAAA,KACAJ,EAAAE,EAAAG,KAAAP,IACAH,EAAAK,EAAA,MACAH,EAAAD,GAAAvI,KAAA2I,EAAA,IACAL,EAAAK,EAAA,IAAAhR,EAAAgR,EAAA,IAAA1Q,GAEAuQ,EAAAG,EAAA,IAAAH,EAAAG,EAAA,QACAH,EAAAG,EAAA,IAAA3I,KAAA2I,EAAA,GAGA,OAAAH,GAGA,QAAAU,GAAAC,GAEA,MADA5Q,QAAAqH,KAAAuJ,GACAC,OAAA,SAAAC,EAAA9N,GACA,MAAA8N,IAAAF,EAAA5N,GAAAH,OAAA,IACG,GAGH,QAAAkO,GAAAhB,EAAA1Q,GAWA,IAVA,GAAA2R,IACAC,MAAA5R,IAEA6R,GACAD,SAEAE,GACAF,SAGAN,EAAAK,IAEA,OADAJ,GAAA5Q,OAAAqH,KAAA2J,GACAzR,EAAA,EAAmBA,EAAAqR,EAAA/N,OAAmBtD,IAAA,CACtC,GAAAyQ,GAAAY,EAAArR,GACA6R,EAAAJ,EAAAhB,GACAqB,EAAAD,EAAAE,KAEA,IADAH,EAAAnB,GAAAmB,EAAAnB,QACAmB,EAAAnB,GAAAqB,IAAAtB,EAAAC,GAAAqB,GAAA,CACAF,EAAAnB,GAAAqB,IAAA,EACAH,EAAAlB,GAAAkB,EAAAlB,OACAkB,EAAAlB,GAAAvI,KAAA4J,EAGA,QAFAE,GAAAzB,EAAAC,IAAAC,GAAAqB,GAAArB,GACAwB,EAAAxR,OAAAqH,KAAAkK,GACAE,EAAA,EAAqBA,EAAAD,EAAA3O,OAA2B4O,IAChDT,EAAAQ,EAAAC,IAAAT,EAAAQ,EAAAC,QACAT,EAAAQ,EAAAC,IAAAT,EAAAQ,EAAAC,IAAAC,OAAAH,EAAAC,EAAAC,MAKA,MAAAP,GA7EA,GAAAR,GAAA,yBACAF,EAAA,0BAAAE,EAAA,SA+EA9R,GAAAD,QAAA,SAAAU,EAAAwF,GACAA,OACA,IAAAkL,IACAkB,KAAA7R,EAAAM,GAGAwR,EAAArM,EAAA8M,KAAuCV,KAAAjR,OAAAqH,KAAA0I,IAA6BgB,EAAAhB,EAAA1Q,GAEpEuS,EAAA,EAEA5R,QAAAqH,KAAA6J,GAAAW,OAAA,SAAAnS,GAAoD,eAAAA,IAAsBoS,QAAA,SAAAlT,GAE1E,IADA,GAAAmT,GAAA,EACAb,EAAAtS,GAAAmT,IACAA,GAEAb,GAAAtS,GAAA6I,KAAAsK,GACAhC,EAAAnR,GAAAmT,GAAA,6FACAH,IAAA,OAAAhT,EAAA,OAAA0Q,EAAA1C,WAAAiD,QAAA,eAAAmC,KAAAC,UAAAF,IAAA,MAAsIb,EAAAtS,GAAAkI,IAAA,SAAA1B,GAA+C,MAAA4M,MAAAC,UAAA7M,GAAA,KAAA2K,EAAAnR,GAAAwG,GAAAwH,aAAyE1H,KAAA,eAG9P0M,IAAA,IAAAtC,EAAA1C,WAAAiD,QAAA,eAAAmC,KAAAC,UAAA5S,IAAA,MAA4G6R,EAAAD,KAAAnK,IAAA,SAAA1B,GAA4C,MAAA4M,MAAAC,UAAA7M,GAAA,KAAA2K,EAAAkB,KAAA7L,GAAAwH,aAAsE1H,KAAA,gBAE9N,IAAAgN,GAAA,GAAAC,QAAAC,MAAAR,IAAqCS,KAAA,mBACrC,IAAAxN,EAAAyN,KAAqB,MAAAJ,EAErB,IAAA/C,GAAAgD,OAAAhD,KAAAgD,OAAAI,WAAAJ,OAAAK,QAAAL,OAAAM,MAEAC,EAAAvD,EAAAwD,gBAAAT,GACAjD,EAAA,GAAAkD,QAAAS,OAAAF,EAGA,OAFAzD,GAAAI,UAAAqD,EAEAzD,IAMA,SAAArQ,EAAAD,GAQAC,EAAAD,QAAA,SAAAkU,EAAAC,EAAAC,GACA,SACA,IAAAC,GAAA,GAAAH,GAAAxJ,WAAA0J,EACA,SAAAE,GAAAC,EAAAC,GAEAD,IAAA,CACAC,KAAA,CACA,IAAAC,GAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,EAAAC,EAAA,CACAX,GAAAN,EAAAG,EAAA,SACAK,GAAAR,EAAAG,EAAA,SACAO,GAAAV,EAAAG,EAAA,SACAS,GAAAZ,EAAAG,EAAA,SACAW,GAAAd,EAAAG,EAAA,SACA,KAAAC,EAAA,GAAuBA,EAAA,IAAAF,EAAA,GAA2BE,IAAA,MAClDG,EAAAD,CACAG,GAAAD,CACAG,GAAAD,CACAG,GAAAD,CACAG,GAAAD,CACA,KAAAT,EAAA,GAA2BA,EAAA,MAAkBA,IAAA,KAC7CY,EAAAjB,EAAAI,EAAAC,GAAA,IACAW,KAAAV,GAAA,EAAAA,IAAA,KAAAE,EAAAE,GAAAF,EAAAI,GAAA,KAAAK,EAAAH,EAAA,kBACAA,GAAAF,CACAA,GAAAF,CACAA,GAAAF,GAAA,GAAAA,IAAA,CACAA,GAAAF,CACAA,GAAAU,CACAhB,GAAAE,EAAAG,GAAA,GAAAY,EAEA,IAAAZ,EAAAH,EAAA,MAAwCG,EAAA,IAAAH,EAAA,MAAgCG,IAAA,KACxEY,GAAAjB,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YACAW,KAAAV,GAAA,EAAAA,IAAA,KAAAE,EAAAE,GAAAF,EAAAI,GAAA,KAAAK,EAAAH,EAAA,kBACAA,GAAAF,CACAA,GAAAF,CACAA,GAAAF,GAAA,GAAAA,IAAA,CACAA,GAAAF,CACAA,GAAAU,CACAhB,GAAAK,GAAA,GAAAY,EAEA,IAAAZ,EAAAH,EAAA,MAAwCG,EAAA,IAAAH,EAAA,OAAiCG,IAAA,KACzEY,GAAAjB,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YACAW,KAAAV,GAAA,EAAAA,IAAA,KAAAE,EAAAE,EAAAE,GAAA,KAAAK,EAAAH,EAAA,kBACAA,GAAAF,CACAA,GAAAF,CACAA,GAAAF,GAAA,GAAAA,IAAA,CACAA,GAAAF,CACAA,GAAAU,CACAhB,GAAAK,GAAA,GAAAY,EAEA,IAAAZ,EAAAH,EAAA,OAAyCG,EAAA,IAAAH,EAAA,OAAiCG,IAAA,KAC1EY,GAAAjB,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YACAW,KAAAV,GAAA,EAAAA,IAAA,KAAAE,EAAAE,EAAAF,EAAAI,EAAAF,EAAAE,GAAA,KAAAK,EAAAH,EAAA,kBACAA,GAAAF,CACAA,GAAAF,CACAA,GAAAF,GAAA,GAAAA,IAAA,CACAA,GAAAF,CACAA,GAAAU,CACAhB,GAAAK,GAAA,GAAAY,EAEA,IAAAZ,EAAAH,EAAA,OAAyCG,EAAA,IAAAH,EAAA,OAAiCG,IAAA,KAC1EY,GAAAjB,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,OAAAL,EAAAK,EAAA,YACAW,KAAAV,GAAA,EAAAA,IAAA,KAAAE,EAAAE,EAAAE,GAAA,KAAAK,EAAAH,EAAA,iBACAA,GAAAF,CACAA,GAAAF,CACAA,GAAAF,GAAA,GAAAA,IAAA,CACAA,GAAAF,CACAA,GAAAU,CACAhB,GAAAK,GAAA,GAAAY,EAEAX,IAAAC,EAAA,CACAC,KAAAC,EAAA,CACAC,KAAAC,EAAA,CACAC,KAAAC,EAAA,CACAC,KAAAC,EAAA,EAEAf,EAAAG,EAAA,QAAAG,CACAN,GAAAG,EAAA,QAAAK,CACAR,GAAAG,EAAA,QAAAO,CACAV,GAAAG,EAAA,QAAAS,CACAZ,GAAAG,EAAA,QAAAW,EAEA,OAAY9I,KAAAiI,KAKZ,SAAArU,EAAAD,GAEA,GAAAuV,GAAAjV,KAIA+O,MAAA,EACA,oBAAAhP,WAAA,KAAAA,KAAAmV,iBACAnG,EAAA,GAAAhP,MAAAmV,eAKA,IAAAC,GAAA,SAAAlJ,EAAAmJ,EAAAC,EAAAC,EAAAjM,EAAAuC,GACA,GAAAtL,OAAA,GACAqJ,EAAAiC,EAAA,EACA2J,GAAAlM,EAAAM,GAAA,EACA6I,EAAAnJ,EAAAkM,CACA,QAAA5L,GACA,OACAyL,EAAAxJ,GAAAK,EAAAuJ,WAAAF,EAAA,EACA,QACAF,EAAAxJ,EAAA,GAAAjC,GAAA,MAAAsC,EAAAuJ,WAAAF,EAAA,EACA,QACAF,EAAAxJ,EAAA,GAAAjC,GAAA,MAAAsC,EAAAuJ,WAAAF,EAAA,EACA,QACAF,EAAAxJ,EAAA,GAAAjC,GAAA,MAAAsC,EAAAuJ,WAAAF,GAEA,KAAAjM,EAAAkM,GAAA,EAAA5L,IAAA,CAGA,IAAArJ,EAAA,EAAAqJ,EAAkBrJ,EAAAkS,EAAOlS,IAAA,IACzB+U,EAAAzJ,EAAAtL,GAAA,GAAA2L,EAAAuJ,WAAAF,EAAAhV,IAAA,GAAA2L,EAAAuJ,WAAAF,EAAAhV,EAAA,OAAA2L,EAAAuJ,WAAAF,EAAAhV,EAAA,MAAA2L,EAAAuJ,WAAAF,EAAAhV,EAAA,EAEA,QAAAiV,GACA,OACAH,EAAAxJ,EAAA4G,EAAA,KAAAvG,EAAAuJ,WAAAF,EAAA9C,EAAA,EACA,QACA4C,EAAAxJ,EAAA4G,EAAA,KAAAvG,EAAAuJ,WAAAF,EAAA9C,EAAA,EACA,QACA4C,EAAAxJ,EAAA4G,EAAA,KAAAvG,EAAAuJ,WAAAF,EAAA9C,MAMAiD,EAAA,SAAAC,EAAAN,EAAAC,EAAAC,EAAAjM,EAAAuC,GACA,GAAAtL,OAAA,GACAqJ,EAAAiC,EAAA,EACA2J,GAAAlM,EAAAM,GAAA,EACA6I,EAAAnJ,EAAAkM,CACA,QAAA5L,GACA,OACAyL,EAAAxJ,GAAA8J,EAAAJ,EAAA,EACA,QACAF,EAAAxJ,EAAA,GAAAjC,GAAA,MAAA+L,EAAAJ,EAAA,EACA,QACAF,EAAAxJ,EAAA,GAAAjC,GAAA,MAAA+L,EAAAJ,EAAA,EACA,QACAF,EAAAxJ,EAAA,GAAAjC,GAAA,MAAA+L,EAAAJ,GAEA,KAAAjM,EAAAkM,GAAA,EAAA5L,IAAA,CAGA,IAAArJ,EAAA,EAAAqJ,EAAkBrJ,EAAAkS,EAAOlS,IAAA,IACzB+U,EAAAzJ,EAAAtL,GAAA,KAAAoV,EAAAJ,EAAAhV,IAAA,GAAAoV,EAAAJ,EAAAhV,EAAA,OAAAoV,EAAAJ,EAAAhV,EAAA,MAAAoV,EAAAJ,EAAAhV,EAAA,EAEA,QAAAiV,GACA,OACAH,EAAAxJ,EAAA4G,EAAA,KAAAkD,EAAAJ,EAAA9C,EAAA,EACA,QACA4C,EAAAxJ,EAAA4G,EAAA,KAAAkD,EAAAJ,EAAA9C,EAAA,EACA,QACA4C,EAAAxJ,EAAA4G,EAAA,KAAAkD,EAAAJ,EAAA9C,MAIAmD,EAAA,SAAA1C,EAAAmC,EAAAC,EAAAC,EAAAjM,EAAAuC,GACA,GAAAtL,OAAA,GACAqJ,EAAAiC,EAAA,EACA2J,GAAAlM,EAAAM,GAAA,EACA6I,EAAAnJ,EAAAkM,EACAG,EAAA,GAAAjM,YAAAsF,EAAAI,kBAAA8D,EAAAjG,MAAAsI,IAAAjM,IACA,QAAAM,GACA,OACAyL,EAAAxJ,GAAA8J,EAAA,EACA,QACAN,EAAAxJ,EAAA,GAAAjC,GAAA,MAAA+L,EAAA,EACA,QACAN,EAAAxJ,EAAA,GAAAjC,GAAA,MAAA+L,EAAA,EACA,QACAN,EAAAxJ,EAAA,GAAAjC,GAAA,MAAA+L,EAAA,GAEA,KAAArM,EAAAkM,GAAA,EAAA5L,IAAA,CAGA,IAAArJ,EAAA,EAAAqJ,EAAkBrJ,EAAAkS,EAAOlS,IAAA,IACzB+U,EAAAzJ,EAAAtL,GAAA,KAAAoV,EAAApV,IAAA,GAAAoV,EAAApV,EAAA,OAAAoV,EAAApV,EAAA,MAAAoV,EAAApV,EAAA,EAEA,QAAAiV,GACA,OACAH,EAAAxJ,EAAA4G,EAAA,KAAAkD,EAAAlD,EAAA,EACA,QACA4C,EAAAxJ,EAAA4G,EAAA,KAAAkD,EAAAlD,EAAA,EACA,QACA4C,EAAAxJ,EAAA4G,EAAA,KAAAkD,EAAAlD,KAIA7S,GAAAD,QAAA,SAAAgM,EAAA0J,EAAAC,EAAAC,EAAAjM,EAAAuC,GACA,mBAAAF,GACA,MAAAyJ,GAAAzJ,EAAA0J,EAAAC,EAAAC,EAAAjM,EAAAuC,EAEA,IAAAF,YAAAgC,OACA,MAAA+H,GAAA/J,EAAA0J,EAAAC,EAAAC,EAAAjM,EAAAuC,EAGA,IAAAqJ,KAAAW,QAAAX,EAAAW,OAAAC,SAAAnK,GACA,MAAA+J,GAAA/J,EAAA0J,EAAAC,EAAAC,EAAAjM,EAAAuC,EAEA,IAAAF,YAAAX,aACA,MAAA0K,GAAA,GAAAhM,YAAAiC,GAAA0J,EAAAC,EAAAC,EAAAjM,EAAAuC,EAEA,IAAAF,EAAAhC,iBAAAqB,aACA,MAAA0K,GAAA,GAAAhM,YAAAiC,EAAAhC,OAAAgC,EAAAuB,WAAAvB,EAAAQ,YAAAkJ,EAAAC,EAAAC,EAAAjM,EAAAuC,EAEA,IAAAF,YAAAyH,MACA,MAAAwC,GAAAjK,EAAA0J,EAAAC,EAAAC,EAAAjM,EAAAuC,EAEA,UAAA1F,OAAA,4BAKA,SAAAvG,EAAAD,EAAAS,GAEA,QAAAiD,GAAAC,EAAAC,GAAiD,KAAAD,YAAAC,IAA0C,SAAAC,WAAA,qCAI3F,GAAAkH,GAAAtK,EAAA,GAEA6I,EAAA7I,EAAA,GACA8I,EAAAD,EAAAC,MAEA6M,EAAA,WACA,QAAAA,KACA1S,EAAApD,KAAA8V,GAEA9V,KAAA+V,OAAA,GAAAtL,GACAzK,KAAA+V,OAAAvJ,aAmBA,MAhBAsJ,GAAAtU,UAAAwU,OAAA,SAAAtK,GAEA,MADA1L,MAAA+V,OAAAtJ,OAAAf,GACA1L,MAGA8V,EAAAtU,UAAA4K,OAAA,SAAA6J,GACA,GAAA7J,GAAApM,KAAA+V,OAAAzI,SAAA5D,MACA,KAAAuM,EACA,MAAA7J,EAEA,YAAA6J,EACA,MAAAhN,GAAAmD,EAEA,UAAAlG,OAAA,gCAGA4P,IAGAnW,GAAAD,QAAA,WACA,UAAAoW,UP6cM,SAAUnW,EAAQD,EAASS,GAEjC,YQt2Ce,SAAS+V,GAAQtQ,GAuF9B,QAASuQ,GAA2B3Q,GAClC,GAAI0J,SAEFA,GADE1J,EAAO4Q,WACD,GAAIlQ,OAAMV,EAAO4Q,YAEjB,GAAIlQ,OAAM,UAGpB,IAAImQ,SACJ,KACEA,EAAUC,EAAgB9Q,EAAO+Q,yBACjC,MAAO5H,GACP0H,EAAU7Q,EAAO+Q,wBAGnB,GAAIC,SACJ,IAAIhR,EAAOiR,SACT,IACED,EAAezD,KAAK2D,MAAMlR,EAAOiR,UACjC,MAAO9H,GACP6H,EAAehR,EAAOiR,aAGxBD,KAOF,OALAtH,GAAMuH,YACNvH,EAAMuH,SAASJ,QAAUA,EACzBnH,EAAMuH,SAASE,OAASnR,EAAOmR,OAC/BzH,EAAMuH,SAASL,WAAa5Q,EAAO4Q,WACnClH,EAAMuH,SAAS/K,KAAO8K,EACftH,EAET,QAAS0H,GAAaH,GACpB,IAAKA,EAASI,GAAI,CAChB,GAAI3H,GAAQ,GAAIhJ,OAAMuQ,EAASL,WAC/B,IAAIK,EACF,MAAOA,GAASK,OAAOC,MAAM,WAAQ,WAClCC,KAAK,SAACjR,GAOL,KANAmJ,GAAMuH,YAC2B,IAA7B1V,OAAOqH,KAAKrC,GAAMnC,OACpBsL,EAAMuH,SAAWA,EAEjBvH,EAAMuH,SAAW1Q,EAEbmJ,IAId,MAAOuH,GAGT,QAASQ,GAAkBR,EAAU7Q,GACnC,GAAIsR,IAAU,CAWd,IAVItR,EAAQnE,eAAe,aACzByV,EAAUtR,EAAQsR,cACXtR,GAAQsR,SAEbA,IACF1G,QAAQ2G,IAAI,WACZ3G,QAAQ2G,IAAIvR,GACZ4K,QAAQ2G,IAAI,YACZ3G,QAAQ2G,IAAIV,IAEV7Q,GAAWA,EAAQwR,oBAAqB,CAC1C,GAAIX,EAAS/K,MAAQ+K,EAASJ,SAAWI,EAASE,OAChD,MAAO,IAAIU,SAAQ,SAAUC,EAASC,GACpCD,EAAQb,IAGZ,IAAIe,IACF9L,QACA2K,WACAM,OAAQ,GAEV,OAAO,IAAIU,SAAQ,SAAUC,EAASC,GACpC,GAAMlB,GAAUI,EAASJ,QACrBoB,QACJ,IAAIpB,GAAWA,EAAQqB,SAAwC,kBAArBrB,GAAQqB,QAAyB,CACzED,IAGA,KAFA,GAAME,GAAOtB,EAAQqB,UACjBE,EAASD,EAAKE,QACVD,EAAOrI,MACTqI,EAAOhW,OAASgW,EAAOhW,MAAMgC,QAAkC,IAAxBgU,EAAOhW,MAAMgC,SACtD6T,EAAgBG,EAAOhW,MAAM,IAAMgW,EAAOhW,MAAM,IAElDgW,EAASD,EAAKE,WAGhBJ,GAAkBhB,EAASJ,OAI7B,OAFAmB,GAAcnB,QAAUoB,EACxBD,EAAcb,OAASF,EAASE,OAC5BmB,EAAqBrB,GAChBA,EAASK,OAAOC,MAAM,WAAQ,WAClCC,KAAK,SAAUjR,GACdyR,EAAc9L,KAAO3F,EACrBuR,EAAQE,KAEHO,EAAqBtB,GACvB,GAAIY,SAAQ,SAAUC,EAASC,GACpCC,EAAc9L,KAAO+K,EAAS/K,KAC9B4L,EAAQE,SAGVF,GAAQE,KAIZ,MAAIM,GAAqBrB,GAChBA,EAASK,OAAOC,MAAM,WAAQ,WAC5BgB,EAAqBtB,GACvB,GAAIY,SAAQ,SAAUC,EAASC,GACpCD,EAAQb,EAAS/K,QAGZ,GAAI2L,SAAQ,SAAUC,EAASC,GACpCD,QAMR,QAAShB,GAAgB0B,GACvB,GAAI3B,KACJ,KAAK2B,EACH,MAAO3B,EAGT,KAAK,GADD4B,GAAcD,EAAU/P,MAAM,QACzB3H,EAAI,EAAGA,EAAI2X,EAAYrU,OAAQtD,IAAK,CAC3C,GAAI4X,GAAaD,EAAY3X,GACzB6X,EAAQD,EAAWnQ,QAAQ,KAC/B,IAAIoQ,EAAQ,EAAG,CACb,GAAIpU,GAAMmU,EAAWE,UAAU,EAAGD,GAAO1P,cACrC4P,EAAMH,EAAWE,UAAUD,EAAQ,EACvC9B,GAAQtS,GAAOsU,GAGnB,MAAOhC,GAGT,QAASyB,GAAqBrB,GAC5B,SAAQA,EAASK,MAAiC,kBAAlBL,GAASK,MAE3C,QAASiB,GAAqBtB,GAC5B,SAAQA,EAAS/K,MAAiC,WAAzBrD,EAAOoO,EAAS/K,OAtO3C,GAAI9F,EAAQ0S,OAGV,MAAO,IAAIjB,SAAQ,SAACC,EAASC,GAC3B,GAAM/R,GAAS,GAAI+S,gBACfC,EAAM5S,EAAQ6S,IACdhR,EAAS7B,EAAQ6B,MAErBjC,GAAOkT,KAAKjR,EAAQ+Q,GAAK,GACrB5S,EAAQyQ,UACNzQ,EAAQyQ,QAAQ,uBACXzQ,GAAQyQ,QAAQ,gBAEzBtV,OAAOqH,KAAKxC,EAAQyQ,SAASxD,QAAQ,SAAC9O,GACpCyB,EAAOmT,iBAAiB5U,EAAK6B,EAAQyQ,QAAQtS,OAGjDyB,EAAOoT,KAAKhT,EAAQG,MACpBP,EAAOqT,OAAS,WACVrT,EAAOmR,QAAU,KAAOnR,EAAOmR,OAAS,IAC1CW,EAAQvE,KAAK2D,MAAMlR,EAAOiR,WAE1Bc,EAAOpB,EAA2B3Q,KAGtCA,EAAOsT,QAAU,WACfvB,EAAOpB,EAA2B3Q,MAKjC,KAAKI,EAAQmT,QAAU7F,QAAUA,OAAO8F,MAC7C,MAAOA,OAAMpT,EAAQ6S,IAAK7S,GACvBoR,KAAKJ,GACLI,KAAK,SAAAP,GAAA,MAAYQ,GAAkBR,EAAU7Q,IAGhD,IAAMJ,GAAS,GAAI+S,gBACfU,EAAU,GAAI5B,SAAQ,SAACC,EAASC,GAClC,GAAIiB,GAAM5S,EAAQ6S,IACdhR,EAAS7B,EAAQ6B,MAErBjC,GAAOkT,KAAKjR,EAAQ+Q,GAAK,GACzBzX,OAAOqH,KAAKxC,EAAQyQ,SAASxD,QAAQ,SAAC9O,GACpCyB,EAAOmT,iBAAiB5U,EAAK6B,EAAQyQ,QAAQtS,MAE/CyB,EAAOoT,KAAKhT,EAAQG,MACpBP,EAAOqT,OAAS,WACd,GAAIrT,EAAOmR,QAAU,KAAOnR,EAAOmR,OAAS,IAAK,CAC/C,GAAIuC,GAAc1T,EAAOiR,SAAY1D,KAAK2D,MAAMlR,EAAOiR,aACnDJ,QACJ,KACEA,EAAUC,EAAgB9Q,EAAO+Q,yBACjC,MAAO5H,GACP0H,EAAU7Q,EAAO+Q,wBAEnB,GAAI4C,IACFzN,KAAMwN,EACN7C,QAASA,EACTM,OAAQnR,EAAOmR,OACfP,WAAY5Q,EAAO4Q,WAErBkB,GAAQL,EAAkBkC,EAAevT,QAErCA,GAAQnE,eAAe,YAAcmE,EAAQsR,SAC/C1G,QAAQ2G,IAAI3R,EAAO+Q,yBAErBgB,EAAOpB,EAA2B3Q,KAGtCA,EAAOsT,QAAU,WACfvB,EAAOpB,EAA2B3Q,MAGtC,IAAII,EAAQwT,kBAAmB,CAI7B,OACEC,QAASJ,EACTK,MALF,WACE9T,EAAO8T,UAOT,MAAOL,GRqxCblY,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAIyG,GAA4B,kBAAXO,SAAoD,gBAApBA,QAAOC,SAAwB,SAAU1F,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXyF,SAAyBzF,EAAI2F,cAAgBF,QAAUzF,IAAQyF,OAAOpH,UAAY,eAAkB2B,GAEtQzD,GAAQmC,QQ/2CgBqU,EAFxB/V,EAAA,IRimDAR,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YA+DA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCA9DhHxC,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAIyG,GAA4B,kBAAXO,SAAoD,gBAApBA,QAAOC,SAAwB,SAAU1F,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXyF,SAAyBzF,EAAI2F,cAAgBF,QAAUzF,IAAQyF,OAAOpH,UAAY,eAAkB2B,IAElQK,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MSjnDhiBiW,EAAApZ,EAAA,ITqnDIqZ,EAAYtW,EAAuBqW,GSpnDvCE,EAAAtZ,EAAA,ITwnDIuZ,EAAUxW,EAAuBuW,GSvnDrCE,EAAAxZ,EAAA,IT2nDIyZ,EAAa1W,EAAuByW,GS1nDxCE,EAAA1Z,EAAA,IT8nDI2Z,EAAmB5W,EAAuB2W,GS7nD9CE,EAAA5Z,EAAA,ITioDI6Z,EAAgB9W,EAAuB6W,GShoD3CE,EAAA9Z,EAAA,ITooDI+Z,EAAahX,EAAuB+W,GSnoDxCE,EAAAha,EAAA,ITuoDIia,EAAWlX,EAAuBiX,GStoDtCE,EAAAla,EAAA,IT0oDIma,EAAapX,EAAuBmX,GSzoDxCE,EAAApa,EAAA,IT6oDIqa,EAAWtX,EAAuBqX,GS5oDtCE,EAAAta,EAAA,ITgpDIua,EAAUxX,EAAuBuX,GS/oDrCE,EAAAxa,EAAA,ITmpDIya,EAAU1X,EAAuByX,GSlpDrCzW,EAAA/D,EAAA,GTspDIgE,EAAiBjB,EAAuBgB,GSrpD5C2W,EAAA1a,EAAA,GTypDI2a,EAAY5X,EAAuB2X,GSvpDlBE,ET6pDD,WS5pDlB,QAAAA,GAAYC,GAAQ5X,EAAApD,KAAA+a,GAClB/a,KAAKuZ,SAAW,GAAI0B,WAAQjb,MAC5BA,KAAKyZ,OAAS,GAAIyB,WAAMlb,MACxBA,KAAK2Z,UAAY,GAAIwB,WAASnb,MAC9BA,KAAK6Z,gBAAkB,GAAIuB,WAAepb,MAC1CA,KAAK+Z,aAAe,GAAIsB,WAAYrb,MACpCA,KAAKia,UAAY,GAAIqB,WAAStb,MAC9BA,KAAKma,QAAU,GAAIoB,WAAOvb,MAC1BA,KAAKqa,UAAY,GAAImB,WAASxb,MAC9BA,KAAKua,QAAU,GAAIkB,WAAOzb,MAC1BA,KAAKya,OAAS,GAAIiB,WAAM1b,MACxBA,KAAK2a,OAAS,GAAIgB,WAAM3b,MACxBA,KAAK4b,YAAcZ,EAAOa,SAAW,0BACrC7b,KAAK8b,uBAAuBd,EAAOvZ,eAAe,mBAA6C,IAAzBuZ,EAAOe,eAC7E/b,KAAKgc,mBAAmBhB,EAAOvZ,eAAe,oBAA+C,IAA1BuZ,EAAOnV,gBAC1E7F,KAAKqH,eAAe2T,EAAOvZ,eAAe,gBAAuC,IAAtBuZ,EAAOiB,YAClEjc,KAAKkc,aAAelc,KAAKmc,gBAAgBnB,GACzChb,KAAKoc,wBAAyBpc,KAAKkc,aACnClc,KAAKqc,YAAYrB,EAAOvZ,eAAe,aAAiC,IAAnBuZ,EAAO9D,SAE5DlX,KAAKsc,YAActB,EAAOsB,aAAepG,UACzClW,KAAKqX,QAAU2D,EAAO3D,SAAWA,QT22DnC,MAzMA7T,GAAauX,IACXhX,IAAK,kBACLnC,MAAO,SSrnDO2a,EAAOC,GAErB,GADAA,EAAoBA,IAAqB,EACrCD,GAA0B,gBAAVA,GAClB,MAAOA,EAGT,IAAIE,SAkBJ,OAhBIF,IAA0B,gBAAjB,KAAOA,EAAP,YAAAlU,EAAOkU,MACdA,EAAM9a,eAAe,iBACvBgb,EAAaF,EAAMG,YACfF,SACKD,GAAMG,aAIbH,EAAM9a,eAAe,kBACvBgb,EAAaF,EAAMI,aACfH,SACKD,GAAMI,eAKZF,KTwnDP1Y,IAAK,uBACLnC,MAAO,SStnDYgE,EAAS8W,GAC5B,GAAIA,EACF,MAAO1c,MAAK4c,kBAAkBhX,EAAS8W,EAGzC,IAAI9W,GAAWA,EAAQ8W,aAAe9W,EAAQ+W,aAAc,CAC1D,GAAID,GAAc9W,EAAQ8W,aAAe9W,EAAQ+W,YAEjD,OADC/W,GAAQ8W,kBAAsB9W,GAAQ8W,kBAAqB9W,GAAQ+W,aAC7D3c,KAAK4c,kBAAkBhX,EAAS8W,GAClC,GAAI1c,KAAKoc,sBACd,MAAOpc,MAAK4c,kBAAkBhX,EAAS5F,KAAKkc,aAE5C,IAAIK,GAAQvc,KAAKmc,gBAAgBvW,GAAS,EAC1C,OAAO5F,MAAK4c,kBAAkBhX,EAAS2W,MT0nDzCxY,IAAK,oBACLnC,MAAO,SSvnDSgE,EAAS8W,GACzB,GAAIrG,KASJ,OARIqG,KACFrG,EAAQ5P,UAAc3E,sBAAwB9B,KAAK6c,8BAA8BH,IAG/E9W,EAAQyQ,SACVtV,OAAO+b,OAAOzG,EAASzQ,EAAQyQ,SAG1BA,KT0nDPtS,IAAK,gCACLnC,MAAO,SSxnDqB8a,GAC5B,SAAUjW,UAAc1E,4BAA8B2a,KT2nDtD3Y,IAAK,wBACLnC,MAAO,SSznDagE,GAAS,GAAAqP,GAAAjV,IAC7Be,QAAOqH,KAAKxC,GAASiC,IAAI,SAACkV,GACV,SAAVA,GACU,WAAVA,GACU,kBAAVA,GACU,WAAVA,GACU,sBAAVA,GACU,uBAAVA,GACU,wBAAVA,GACA9H,EAAK+H,SAASpX,EAAQmX,WACjBnX,GAAQmX,QTynDnBhZ,IAAK,WACLnC,MAAO,SSrnDAN,GACP,IAAK,GAAIyC,KAAOzC,GACd,GAAIA,EAAOG,eAAesC,GACxB,OAAO,CAGX,QAAO,KTwnDPA,IAAK,eACLnC,MAAO,SStnDIgE,GAMX,MALAA,GAAQqX,OAASrX,EAAQqX,WACrBrX,EAAQsX,SACVtX,EAAQqX,OAAOC,OAAStX,EAAQsX,aACzBtX,GAAQsX,QAEVtX,EAAQqX,UTynDflZ,IAAK,iBACLnC,MAAO,SSvnDMgE,GACb,GAAIA,EAAQuX,cACV,MAAOvX,EAGT,IAAIwX,KACHxX,GAAQmT,SAAUqE,EAAiBrE,QAAS,GAC5CnT,EAAQwT,oBAAqBgE,EAAiBhE,mBAAoB,GAClExT,EAAQwR,sBAAuBgG,EAAiBhG,qBAAsB,EACvE,IAAIoB,GAAM5S,EAAQ6S,GAWlB,OATI7S,GAAQqX,SACVzE,GAAO,IACPA,GAAOzX,OAAOqH,KAAKxC,EAAQqX,QAAQpV,IAAI,SAAC9D,GACtC,MAAOsZ,oBAAmBtZ,GAAO,IAAMsZ,mBAAmBzX,EAAQqX,OAAOlZ,MACxEkC,KAAK,MAEVmX,EAAiB3E,IAAMD,EACvB4E,EAAiB/G,QAAUzQ,EAAQyQ,QAE/BzQ,EAAQ0S,QACV1S,EAAQyQ,QAAQ,gBAAkB,sBAClCzQ,EAAQ0X,KAAO,OACR1X,IAGLA,EAAQG,MAAgC,WAAxBsC,EAAOzC,EAAQG,QAAsBH,EAAQ0S,SAC/D8E,EAAiBrX,KAAOgN,KAAKC,UAAUpN,EAAQG,MAC1CqX,EAAiB/G,QAAQ,kBAC5B+G,EAAiB/G,QAAQ,gBAAkB,mCAI/C+G,EAAiB3V,OAAS7B,EAAQ6B,OAClC2V,EAAiB1R,KAAO9F,EAAQG,KAChCqX,EAAiBE,KAAO,OACjBF,MT0nDPrZ,IAAK,2BACLnC,MAAO,SSxnDgB2b,EAAO3X,GAE9B,MADAA,GAAQyQ,QAAQ,oBAAkBmH,GAC3BD,EAAME,KAAK7X,EAAQ6S,IAAK7S,EAAQG,MACrCsQ,QAASzQ,EAAQyQ,aT4nDnBtS,IAAK,UACL5C,IAAK,WShzDL,MAAOnB,MAAKuZ,YTozDZxV,IAAK,QACL5C,IAAK,WSjzDL,MAAOnB,MAAKyZ,UTqzDZ1V,IAAK,WACL5C,IAAK,WSlzDL,MAAOnB,MAAK2Z,aTszDZ5V,IAAK,iBACL5C,IAAK,WSnzDL,MAAOnB,MAAK6Z,mBTuzDZ9V,IAAK,cACL5C,IAAK,WSpzDL,MAAOnB,MAAK+Z,gBTwzDZhW,IAAK,WACL5C,IAAK,WSrzDL,MAAOnB,MAAKia,aTyzDZlW,IAAK,SACL5C,IAAK,WStzDL,MAAOnB,MAAKma,WT0zDZpW,IAAK,WACL5C,IAAK,WSvzDL,MAAOnB,MAAKqa,aT2zDZtW,IAAK,SACL5C,IAAK,WSxzDL,MAAOnB,MAAKua,WT4zDZxW,IAAK,QACL5C,IAAK,WSzzDL,MAAOnB,MAAKya,UT6zDZ1W,IAAK,QACL5C,IAAK,WS1zDL,MAAOnB,MAAK2a,WT+zDPI,IAGTrb,GAAQmC,QSp4DakZ,ETq4DrBpb,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAGAY,QAAOC,eAAetB,EAAS,cAC7BkC,OAAO,IAGTlC,EAAQmC,QUh6DO,SAAC4D,GACd,MAAO1E,QAAOqH,KAAK3C,GAAQoC,IAAI,SAAC9D,GAC9B,MAAO0B,GAAO1B,MVo6DlBpE,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YW56De,SAASud,GAAkB9P,GAYtC,IAAK,GAHD+P,GAAGC,EAAGld,EAAGC,EACT+L,EATAmR,EAAS,GACTC,EAAY,mEAEZC,EAAQ,GAAItU,YAAWmE,GACvB1B,EAAa6R,EAAM7R,WACnB8R,EAAgB9R,EAAa,EAC7B+R,EAAa/R,EAAa8R,EAKrB1d,EAAI,EAAGA,EAAI2d,EAAY3d,GAAQ,EACpCoM,EAASqR,EAAMzd,IAAM,GAAOyd,EAAMzd,EAAI,IAAM,EAAKyd,EAAMzd,EAAI,GAE3Dqd,GAAa,SAARjR,IAAqB,GAC1BkR,GAAa,OAARlR,IAAmB,GACxBhM,GAAa,KAARgM,IAAiB,EACtB/L,EAAY,GAAR+L,EAEJmR,GAAUC,EAAUH,GAAKG,EAAUF,GAAKE,EAAUpd,GAAKod,EAAUnd,EAkBrE,OAfqB,IAAjBqd,GACAtR,EAAQqR,EAAME,GAEdN,GAAa,IAARjR,IAAgB,EACrBkR,GAAa,EAARlR,IAAc,EACnBmR,GAAUC,EAAUH,GAAKG,EAAUF,GAAK,MAChB,GAAjBI,IACPtR,EAASqR,EAAME,IAAe,EAAKF,EAAME,EAAa,GAEtDN,GAAa,MAARjR,IAAkB,GACvBkR,GAAa,KAARlR,IAAiB,EACtBhM,GAAa,GAARgM,IAAe,EACpBmR,GAAUC,EAAUH,GAAKG,EAAUF,GAAKE,EAAUpd,GAAK,KAGpDmd,EXy4DX9c,OAAOC,eAAetB,EAAS,cAC3BkC,OAAO,IAEXlC,EAAQmC,QWl7DgB6b,EX29DxB/d,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAGAY,QAAOC,eAAetB,EAAS,cAC7BkC,OAAO,IAGTlC,EAAQmC,QYv+DO,WACb,SAASqR,QAAUA,OAAOlE,YAAeA,aZ0+D3CrP,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAqBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCApBhHxC,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,Maz/DhiBuX,EAAA1a,EAAA,GACA+d,Gb4/DgBhb,EAAuB2X,Ga5/DvC1a,EAAA,KbggEIge,EAAmBjb,EAAuBgb,Ga//D9CE,EAAAje,EAAA,IbmgEIke,EAAwBnb,EAAuBkb,GajgE9BE,EbugEX,WatgER,QAAAA,KAAclb,EAAApD,KAAAse,GACZte,KAAKue,gBAAkBC,UACvBxe,KAAKye,qBAAuBC,UbwhE9B,MAZAlb,GAAa8a,IACXva,IAAK,iBACL5C,IAAK,Wa3gEL,MAAOnB,MAAKue,mBb+gEZxa,IAAK,sBACL5C,IAAK,Wa7gEL,MAAOnB,MAAKye,yBbkhEPH,IAGT5e,GAAQmC,Qa9hEayc,Eb+hErB3e,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,GcviExBC,EAAAD,QAAAO,Gd6iEM,SAAUN,EAAQD,EAASS,GAEjC,YAiBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GApBjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MerjEhiB6b,EAAAhf,EAAA,GfyjEIif,EAAkBlc,EAAuBic,GexjE7Cjb,EAAA/D,EAAA,Gf4jEIgE,EAAiBjB,EAAuBgB,Ge1jEvBsa,EfokEA,SAAUa,GenkE7B,QAAAb,GAAYxD,GAAQ,MAAA5X,GAAApD,KAAAwe,GAClBxD,EAASA,MADS2D,EAAA3e,MAAAwe,EAAAU,WAAAne,OAAAue,eAAAd,IAAAhe,KAAAR,KAEZgb,IfsoER,MApEA6D,GAAUL,EAAgBa,GAS1B7b,EAAagb,IACXza,IAAK,cACLnC,MAAO,Se1kEG2d,EAAM3Z,GAOhB,MANAA,GAAUA,MACVA,EAAQ6S,IAAM7S,EAAQ6S,KAAR,GAAkBzY,KAAK4b,YAAc2D,EACnD3Z,EAAQyQ,QAAUrW,KAAKwf,qBAAqB5Z,GAC5CA,EAAQqX,OAASjd,KAAKyf,aAAa7Z,GACnC5F,KAAK0f,sBAAsB9Z,GAC3BA,EAAU5F,KAAK2f,eAAe/Z,GAC1B5F,KAAK8b,qBAAuBlW,EAAQga,oBAClCha,EAAQ0S,SACV1S,EAAQyQ,QAAQ,oBAAkBmH,SAC3B5X,GAAQ0S,QAEV1S,GACE5F,KAAKsc,YAAYuD,UAAYja,EAAQ0S,OACvCtY,KAAK8f,yBAAyB9f,KAAKsc,YAAa1W,IAEvDA,EAAQsR,QAAUlX,KAAKqc,SAChBrc,KAAKsc,YAAY1W,Of8kE1B7B,IAAK,mCACLnC,MAAO,Se3kEwBgE,EAAS8W,EAAaqD,GAyBrD,MAxBAA,GAAsBA,IAAuB,EACzCna,EAAQma,sBACVA,EAAsBna,EAAQma,0BACvBna,GAAQma,qBAGZrD,IACHA,EAAc1c,KAAKmc,gBAAgBvW,GAAS,IAG1CA,EAAQyQ,SAAWzQ,EAAQyQ,QAAQ5P,UAAc3E,6BAC5C8D,GAAQyQ,QAAQ5P,UAAc3E,sBAGvC9B,KAAKggB,oBAEDD,IACF/f,KAAKggB,oBACLhgB,KAAKkc,aAAelc,KAAKmc,gBAAgBO,GACzC1c,KAAKoc,uBAAwB,GAG/BxW,EAAQyQ,QAAUrW,KAAKwf,qBAAqB5Z,EAAS8W,GACrD9W,EAAU5F,KAAK2f,eAAe/Z,GACvBsQ,QAAQtQ,Mf8kEf7B,IAAK,oBACLnC,MAAO,We3kEP5B,KAAKkc,aAAe,KACpBlc,KAAKoc,uBAAwB,MfglExBoC,GezoEmCzD,Uf4oE5Crb,GAAQmC,Qe5oEa2c,Ef6oErB7e,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YA+BA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAlCjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,IgB/pE5dhc,EAAA/D,EAAA,GhBmqEIgE,EAAiBjB,EAAuBgB,GgBlqE5CU,EAAAzE,EAAA,GhBsqEI0E,EAAyB3B,EAAuB0B,GgBrqEpDE,EAAA3E,EAAA,GhByqEI4E,EAAsB7B,EAAuB4B,GgBxqEjDJ,EAAAvE,EAAA,GhB4qEIwE,EAAwBzB,EAAuBwB,GgB3qEnD6b,EAAApgB,EAAA,GhB+qEIqgB,EAAYtd,EAAuBqd,GgB5qEjCvb,GACJyb,KAAM,OACNC,OAAQ,SACRC,GAAI,YACJC,YAAa,cACb3b,YAAa,cACbC,mBAAoB,qBACpBC,YAAa,0BACb0b,SAAU,uBACVzb,YAAa,0BACbC,aAAc,uCACdC,YAAa,sCACbwb,oBAAqB,sBACrBC,2BAA4B,6BAC5BC,SAAU,WACVC,YAAa,cACbC,WAAY,aACZC,KAAM,QAGalG,EhBurEP,SAAUmG,GgBtrEtB,QAAAnG,GAAYzV,GAAQ,MAAApC,GAAApD,KAAAib,GAAA0D,EAAA3e,MAAAib,EAAAiE,WAAAne,OAAAue,eAAArE,IAAAza,KAAAR,KACZwF,EAAQR,IhB62EhB,MAvLA6Z,GAAU5D,EAASmG,GAQnB5d,EAAayX,IACXlX,IAAK,aACLnC,MAAO,SgB7rEEgE,EAASH,EAAQI,EAAgBC,GAC1CD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EAErCF,EAAQW,QACLV,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQW,OAAQd,GACvDK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQW,OAAQvG,KAAK2F,kBACnEC,EAAQG,MAAO,EAAAhB,EAAAlD,SAAkB+D,EAAQW,OAAQvG,KAAK0F,WAAYI,SAC3DF,GAAQW,QAEf0Z,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,MhBqsEnD/B,IAAK,MACLnC,MAAO,SgBlsELgE,GACFA,EAAUqa,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIQ,8FAA8BR,GAC9B4B,EAAaL,YAAaf,CAE9B,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhBqsExC7B,IAAK,WACLnC,MAAO,SgBnsEAgE,GACPA,EAAUqa,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIQ,8FAA8BR,GAC9B4B,EAAaL,YAAaf,EAA1B,QAEJ,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhBssExC7B,IAAK,oBACLnC,MAAO,SgBpsESgE,GAChBA,EAAUqa,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIQ,8FAA8BR,GAC9B4B,EAAaL,YAAaf,EAA1B,iBAEJ,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhBusExC7B,IAAK,kBACLnC,MAAO,SgBrsEOgE,GACdA,EAAUA,KAGV,OADAA,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAFFP,uBAEuBvB,MhBwsExC7B,IAAK,mBACLnC,MAAO,SgBtsEQgE,GACfA,EAAUqa,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIQ,8FAA8BR,GAE9B4B,EAAaL,YAAaf,EAA1B,QAEJ,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhBysExC7B,IAAK,SACLnC,MAAO,SgBvsEFgE,GAEL,GADAA,EAAUA,OACL5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmBrc,EAAa0b,OAAQ1b,EAAa2b,GAAI3b,EAAayb,MACxE5a,mGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKshB,WAAW1b,EAASyb,EAAiBxb,EAAgBC,GAI5D,MADAF,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YA3FL,WA2F0B9B,MhB0sExC7B,IAAK,SACLnC,MAAO,SgBxsEFgE,GACLA,EAAUA,KACV,IAAIQ,8FAA8BR,EAClC,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKshB,WAAW1b,KAAaC,EAAgBC,GAE/C,GAAI0B,GAAaL,YAAaf,CAE9B,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhB2sExC7B,IAAK,OACLnC,MAAO,SgBzsEJgE,GACHA,EAAUA,KACV,IAAIQ,8FAA8BR,EAClC,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,GAC9Cyb,GAAmBrc,EAAa0b,OAAQ1b,EAAa2b,GAC3D3gB,MAAKshB,WAAW1b,EAASyb,EAAiBxb,EAAgBC,GAEtDF,EAAQ2b,UACV3b,EAAQG,KAAKnF,KAAOgF,EAAQ2b,cACrB3b,GAAQ2b,SAGnB,GAAI/Z,GAAaL,YAAaf,EAA1B,OAEJ,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhB4sExC7B,IAAK,mBACLnC,MAAO,SgB1sEQgE,GACfA,EAAUqa,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIQ,8FAA8BR,EAClC,OAAAqa,GAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,oBAAAxB,MAAAQ,KAAAR,KAA+B4F,EAASQ,EAlI1B,WAkI+CpG,KAAK2F,qBhB6sElE5B,IAAK,oBACLnC,MAAO,SgB3sESgE,GAChBA,EAAUA,KACV,IAAIQ,8FAA8BR,EAE9BA,GAAQ4b,cACV5b,EAAQG,KAAKyb,YAAc5b,EAAQ4b,kBAC5B5b,GAAQ4b,YAGjB,IAAIha,GAAaL,YAAaf,CAE9B,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhB8sExC7B,IAAK,UACLnC,MAAO,SgB5sEDgE,GACNA,EAAUA,KACV,IAAIQ,8FAA8BR,EAClC,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKshB,WAAW1b,KAAaC,EAAgBC,GAE/C,GAAI0B,GAAaL,YAAaf,CAE9B,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhB+sExC7B,IAAK,SACLnC,MAAO,SgB7sEFgE,GACLA,EAAUqa,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,OACjCA,EAAQqX,OAASrX,EAAQqX,WACzBrX,EAAQqX,OAAOwE,UAAY7b,EAAQqX,OAAOwE,YAAa,CACvD,IAAIrb,8FAA8BR,GAE9B4B,EAAaL,YAAaf,CAE9B,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MhBgtExC7B,IAAK,oBACLnC,MAAO,SgB9sESgE,GAChBA,EAAUqa,EAAAhF,EAAAzZ,UAAA0d,WAAAne,OAAAue,eAAArE,EAAAzZ,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIQ,8FAA8BR,GAE9B4B,EAAaL,YAAaf,EAA1B,QAEJ,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,OhBktEnCqV,GgB/2E4B1V,UhBk3ErC7F,GAAQmC,QgBl3EaoZ,EhBm3ErBtb,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAeA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAZvFpC,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GiBx5ET,IAAA0C,GAAAnE,EAAA,GjB65EIoE,EAAcrB,EAAuBoB,GiB55EzCJ,EAAA/D,EAAA,GjBg6EIgE,EAAiBjB,EAAuBgB,GiB95EtCwd,GAAc,EAAAnd,EAAA1C,SAAU4E,UAAcnE,MjBo6E5C5C,GAAQmC,QiBl6EO,SAAC+D,EAAS0X,GACvB,GAAIqE,SAKJ,QAJkC,IAA/BD,EAAY3Z,QAAQuV,KACrBqE,EAAU/b,EAAQ0X,SACX1X,GAAQ0X,IAEVqE,GjBq6EThiB,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAGAY,QAAOC,eAAetB,EAAS,cAC7BkC,OAAO,IAGTlC,EAAQmC,QkB97EO,SAAC4D,GAYd,MAXAA,GAASiI,MAAMlM,UAAUiR,OAAOmP,SAAUnc,EAAOoC,IAAI,SAACjG,GACpD,IAA4B,IAAxBA,EAAMmG,QAAQ,KAAa,CAE7B,MADYnG,GAAMqG,MAAM,KACX2K,OAAO,SAAChR,GACnB,OAAkC,IAA3B6D,EAAOsC,QAAQnG,KAGxB,MAAOA,OlBq8EbjC,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YA+CA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAlDjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,ImB39E5d2B,EAAA1hB,EAAA,InB+9EI2hB,EAAoB5e,EAAuB2e,GmB99E/C3d,EAAA/D,EAAA,GnBk+EIgE,EAAiBjB,EAAuBgB,GmBj+E5CU,EAAAzE,EAAA,GnBq+EI0E,EAAyB3B,EAAuB0B,GmBp+EpDE,EAAA3E,EAAA,GnBw+EI4E,EAAsB7B,EAAuB4B,GmBv+EjDJ,EAAAvE,EAAA,GnB2+EIwE,EAAwBzB,EAAuBwB,GmB1+EnD6b,EAAApgB,EAAA,GnB8+EIqgB,EAAYtd,EAAuBqd,GmB7+EvCwB,EAAA5hB,EAAA,InBi/EI6hB,EAAgB9e,EAAuB6e,GmBh/E3CE,EAAA9hB,EAAA,InBo/EI+hB,EAAehf,EAAuB+e,GmBn/E1CE,EAAAhiB,EAAA,InBu/EIiiB,EAAqBlf,EAAuBif,GmBp/E1CE,EAAO,OACPC,EAAc,iCACdtd,GACJyb,KAAM,OACNC,OAAQ,SACRC,GAAI,YACJC,YAAa,cACb3b,YAAa,cACbC,mBAAoB,qBACpBC,YAAa,0BACbC,YAAa,0BACbC,aAAc,uCACdC,YAAa,sCACbwb,oBAAqB,sBACrBC,2BAA4B,6BAC5BC,SAAU,WACVC,YAAa,cACbC,WAAY,aACZC,KAAM,OACNoB,KAAM,QAGFC,GACJC,WAAY,aACZC,WAAY,aACZC,UAAW,YACXC,UAAW,aAGPC,EAAa9hB,OAAOqH,KAAKoa,GAAkB3a,IAAI,SAAC9D,GAAU,MAAOye,GAAiBze,KAInEmX,EnBigFT,SAAUkG,GmBhgFpB,QAAAlG,GAAY1V,GAAQpC,EAAApD,KAAAkb,EAAA,IAAAjG,GAAA0J,EAAA3e,MAAAkb,EAAAgE,WAAAne,OAAAue,eAAApE,IAAA1a,KAAAR,KACZwF,EAAQR,GADI,OAElBiQ,GAAKqN,YAAcA,EAFDrN,EnB6/FpB,MA5fA4J,GAAU3D,EAAOkG,GAWjB5d,EAAa0X,IACXnX,IAAK,gBACLnC,MAAO,SmBzgFKgE,GACZ,GAAIkd,SAMJ,QALIld,EAAQkd,WAAald,EAAQmd,cAC/BD,EAAYld,EAAQkd,WAAald,EAAQmd,WACxCnd,EAAQkd,gBAAoBld,GAAQkd,UAAYld,EAAQmd,YAE3D9C,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwB8iB,EAAWrc,UAAc5D,QAAS4D,UAAc3D,YACjEggB,KnB4gFP/e,IAAK,WACLnC,MAAO,SmB1gFAgE,EAASH,EAAQI,EAAgBC,GACxCD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EAErCF,EAAQgB,MACLf,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQgB,KAAMnB,GACrDK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQgB,KAAM5G,KAAK2F,kBACjEC,EAAQG,MAAO,EAAAhB,EAAAlD,SAAkB+D,EAAQgB,KAAM5G,KAAK0F,WAAYI,SACzDF,GAAQgB,MAEfqZ,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,MnBkhFnD/B,IAAK,MACLnC,MAAO,SmB/gFLgE,GACFA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAC1B4B,EAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBqiFxC7B,IAAK,iBACLnC,MAAO,SmBjhFMgE,GACbA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,EAC9BA,GAAQqX,OAASrX,EAAQqX,WACrBrX,EAAQsX,QAAUtX,EAAQqX,OAAOC,QACnCtX,EAAQqX,OAAOC,OAAUtX,EAAQqX,OAAOC,OAAUtX,EAAQqX,OAAOC,OAAStX,EAAQsX,OAClFtX,EAAQqX,OAAOC,OAAStX,EAAQqX,OAAOC,OAAOzK,OAAO,kBAErD7M,EAAQqX,QACNC,OAAQ,eAGZ,IAAI1V,GAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnByhFxC7B,IAAK,gBACLnC,MAAO,SmBphFKgE,GAEZ,GADAA,EAAUA,OACLA,EAAQgB,KACX,KAAM,IAAIV,OAAM,iDAElB,IAAIN,EAAQgB,MAAQhB,EAAQgB,KAAKuF,KAnFH,IAoF5B,KAAM,IAAIjG,OAAM,6DAIlB,OAFAN,GAAQhF,KAAOgF,EAAQhF,MAAQgF,EAAQgB,KAAKhG,KAC9B,GAAIoiB,WAAgBhjB,KAAM4F,EAAQhF,KAAMgF,EAAQgB,KAAMhB,EAAQqd,aAAcrd,EAAQsd,WACnFC,kBnB4hFfpf,IAAK,8BACLnC,MAAO,SmBvhFmBgE,GAE1B,GADAA,EAAUA,OACNA,EAAQO,GACV,KAAM,IAAID,OAAM,uDAElB,KAAKN,EAAQgB,KACX,KAAM,IAAIV,OAAM,iDAElB,IAAIN,EAAQgB,MAAQhB,EAAQgB,KAAKuF,KAtGH,IAuG5B,KAAM,IAAIjG,OAAM,6DAIlB,OAFAN,GAAQhF,KAAOgF,EAAQhF,MAAQgF,EAAQgB,KAAKhG,KAC9B,GAAIoiB,WAAgBhjB,KAAM4F,EAAQhF,KAAMgF,EAAQgB,KAAMhB,EAAQqd,aAAcrd,EAAQsd,UAAWtd,EAAQO,IACtGgd,kBnB0hFfpf,IAAK,SACLnC,MAAO,SmBxhFFgE,GAKL,MAJAA,GAAUA,MACVA,EAAQ6S,IAAM7S,EAAQ6S,KAAU6J,EAAlB,iBACd1c,EAAQ6B,OAAShB,UAAczE,WAAWE,KAC1C0D,EAAQ0S,QAAS,EACVtY,KAAKwF,OAAOkC,YAAY,KAAM9B,MnB2hFrC7B,IAAK,uBACLnC,MAAO,SmBzhFYgE,GACnB,KAAK,EAAAwc,EAAAvgB,WACH,KAAM,IAAIqE,OAAM,uFAElBN,GAAUA,KACV,IAAIc,GAASd,EAAQG,KAAK5E,IAAI,OAASyE,EAAQG,KAAK5E,IAAI,WAAayE,EAAQG,KAAK5E,IAAI,UAItF,OAHAyE,GAAQ6S,IAAM7S,EAAQ6S,KAAU6J,EAAlB,UAAuC5b,EAAvC,WACdd,EAAQ6B,OAAShB,UAAczE,WAAWE,KAC1C0D,EAAQ0S,QAAS,EACVtY,KAAKwF,OAAOkC,YAAY,KAAM9B,MnBgiFrC7B,IAAK,4BACLnC,MAAO,SmB5hFiBgE,GAAS,GAAAwd,GAAApjB,IACjC4F,GAAUA,KACV,IAAIgB,GAAOhB,EAAQgB,KACfyc,EAAWzd,EAAQG,KACnBud,GAAqB1iB,KAAMgF,EAAQhF,KAAM0f,OAAQ1a,EAAQ0a,OAAQnU,KAAMvG,EAAQgB,KAAKuF,MACpFoX,EAAkBxQ,KAAK2D,MAAM3D,KAAKC,UAAUpN,GAChD,OAAO5F,MAAKwjB,eAAeF,GACxBtM,KAAK,SAACyM,GACDA,EAAKC,aACPH,EAAgB9K,IAAMgL,EAAKC,cAI9B1M,KAAK,WACJ,OAAawG,KAAT5W,EACF,KAAM,IAAIV,OAAM,0BAElB,QAAO,EAAAgc,EAAArgB,SAAY+E,KAEpBoQ,KAAK,SAAC2M,GAKL,MAJAJ,GAAgBlN,QAAUkN,EAAgBlN,YAC1CkN,EAAgBxd,KAAOsd,QAChBE,GAAgB3c,KACvB2c,EAAgBlN,QAAQ,eAAiBsN,EAClCP,EAAK9K,OAAOiL,QnB+hFvBxf,IAAK,0CACLnC,MAAO,SmB5hF+BgE,GAAS,GAAAge,GAAA5jB,IAC/C,MAAK,EAAAoiB,EAAAvgB,WACH,KAAM,IAAIqE,OAAM,uFAElBN,GAAUA,KACV,IAAIgB,GAAOhB,EAAQgB,KACfyc,EAAWzd,EAAQG,KACnBwd,EAAkBxQ,KAAK2D,MAAM3D,KAAKC,UAAUpN,GAEhD,OADAA,GAAQc,OAASd,EAAQG,KAAK5E,IAAI,OAASyE,EAAQG,KAAK5E,IAAI,WAAayE,EAAQG,KAAK5E,IAAI,WACnFnB,KAAK6jB,6BAA6Bje,GACtCoR,KAAK,SAACyM,GACDA,EAAKC,aACPH,EAAgB9K,IAAMgL,EAAKC,cAI9B1M,KAAK,WACJ,OAAawG,KAAT5W,EACF,KAAM,IAAIV,OAAM,0BAElB,QAAO,EAAAgc,EAAArgB,SAAY+E,KAEpBoQ,KAAK,SAAC2M,GAKL,MAJAJ,GAAgBlN,QAAUkN,EAAgBlN,YAC1CkN,EAAgBxd,KAAOsd,QAChBE,GAAgB3c,KACvB2c,EAAgBlN,QAAQ,eAAiBsN,EAClCC,EAAKE,qBAAqBP,QnB+hFrCxf,IAAK,iBACLnC,MAAO,SmB5hFMgE,GAEb,GADAA,EAAUA,OACL5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmBrc,EAAaud,KAAMvd,EAAayb,MACrD5a,mGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK+jB,SAASne,EAASyb,EAAiBxb,EAAgBC,GAI1D,MADAF,GAAQ6B,OAAShB,UAAczE,WAAWK,QACnCrC,KAAKwF,OAAOkC,YAFFP,iBAEuBvB,MnB+hFxC7B,IAAK,+BACLnC,MAAO,SmB7hFoBgE,GAC3BA,EAAUA,KACV,IAAIc,4FAA0Bd,EAC9B,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmBrc,EAAaud,KAAMvd,EAAayb,MACrD5a,mGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK+jB,SAASne,EAASyb,EAAiBxb,EAAgBC,GAE1D,GAAI0B,GAAaL,UAAaT,EAA1B,UAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWK,QACnCrC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBgiFxC7B,IAAK,SACLnC,MAAO,SmB9hFFgE,GACLA,EAAUA,KACV,IAAIc,4FAA0Bd,EAC9BA,GAAQ6S,IAAM7S,EAAQ6S,KAAU6J,EAAlB,IAAiC5b,EAAjC,WACd1G,KAAKsY,OAAO1S,MnBiiFZ7B,IAAK,cACLnC,MAAO,SmB/hFGgE,GACVA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAC1B4B,EAAaL,UAAaT,EAA1B,WAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBkiFxC7B,IAAK,WACLnC,MAAO,SmBhiFAgE,GACPA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAC1B4B,EAAaL,UAAaT,EAA1B,QAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBmiFxC7B,IAAK,eACLnC,MAAO,SmBjiFIgE,GACXA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,EAE9BA,GAAQqX,OAASrX,EAAQqX,WACrBrX,EAAQsX,QAAUtX,EAAQqX,OAAOC,QAC/BtX,EAAQsX,SACVtX,EAAQqX,OAAOC,OAAStX,EAAQsX,aACzBtX,GAAQsX,QAEjBtX,EAAQqX,OAAOC,OAAStX,EAAQqX,OAAOC,OAAOzK,OAAO,yBAErD7M,EAAQqX,OAAOC,OAAS,qBAG1B,IAAI1V,GAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBoiFxC7B,IAAK,cACLnC,MAAO,SmBliFGgE,GACVA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAE1B4B,EAAaL,UAAaT,EAA1B,WAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBqiFxC7B,IAAK,eACLnC,MAAO,SmBniFIgE,GACXA,EAAUA,MACVA,EAAQoe,UAAYpe,EAAQoe,WAAa,OACzCpe,EAAQqX,OAASrX,EAAQqX,UACzB,IAAIvW,4FAA0Bd,EAE9B7E,QAAOqH,KAAKxC,GAASiC,IAAI,SAAC9D,IACS,IAA7B8e,EAAW9a,QAAQhE,KACrB6B,EAAQqX,OAAOlZ,GAAO6B,EAAQ7B,SACvB6B,GAAQ7B,KAInB,IAAIyD,GAAaL,UAAaT,EAA1B,aAA6Cd,EAAQoe,SAGzD,cAFOpe,GAAQoe,UACfpe,EAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBsiFxC7B,IAAK,iBACLnC,MAAO,SmBpiFMgE,GACbA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAE1B4B,EAAaL,UAAaT,EAA1B,QAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBuiFxC7B,IAAK,oBACLnC,MAAO,SmBriFSgE,GAChBA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAC1B4B,EAAaL,UAAaT,EAA1B,iBAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBwiFxC7B,IAAK,mBACLnC,MAAO,SmBtiFQgE,GACfA,EAAUA,KACV,IAAIc,4FAA0Bd,EAC9B,OAAAqa,GAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAA+B4F,EAASc,EAvV1B,SAuV6C1G,KAAK2F,qBnByiFhE5B,IAAK,iBACLnC,MAAO,SmBviFMgE,GACbA,EAAUA,MACVA,EAAQG,KAAOH,EAAQG,QACvB,IAAIW,4FAA0Bd,EAE9B,KAAKA,EAAQG,KAAKI,GAAI,CACpB,GAAI2c,GAAY9iB,KAAKikB,cAAcre,EACnCA,GAAQG,KAAKI,GAAK2c,EAGpBld,EAAQG,KAAKqN,KAAO,cAEpB,IAAI5L,GAAaL,UAAaT,EAA1B,mBAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnB0iFxC7B,IAAK,OACLnC,MAAO,SmBxiFJgE,GACHA,EAAUA,MACVA,EAAQG,KAAOH,EAAQG,QACvB,IAAIW,4FAA0Bd,EAE9B,KAAKA,EAAQG,KAAKua,SAAW1a,EAAQG,KAAKua,OAAOna,GAE/C,GADAP,EAAQG,KAAKua,UACT1a,EAAQO,GACVP,EAAQG,KAAKua,OAAOna,GAAKP,EAAQO,SAC1BP,GAAQO,OACV,KAAIP,EAAQse,SAIjB,KAAM,IAAIhe,OAAM,kDAHhBN,GAAQG,KAAKua,OAAOna,GAAKP,EAAQse,eAC1Bte,GAAQse,SAMfte,EAAQhF,MACVgF,EAAQG,KAAKnF,KAAOgF,EAAQhF,WACrBgF,GAAQhF,MACNgF,EAAQ2b,UACjB3b,EAAQG,KAAKnF,KAAOgF,EAAQ2b,cACrB3b,GAAQ2b,QAGjB,IAAI/Z,GAAaL,UAAaT,EAA1B,OAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnB2iFxC7B,IAAK,aACLnC,MAAO,SmBziFEgE,GACTA,EAAUA,KACV,IAAIc,4FAA0Bd,EAC9B,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK+jB,SAASne,KAAaC,EAAgBC,GAE7C,GAAI0B,GAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnB4iFxC7B,IAAK,OACLnC,MAAO,SmB1iFJgE,GACHA,EAAUA,MACVA,EAAQG,KAAOH,EAAQG,QACvB,IAAIW,4FAA0Bd,EAE1BA,GAAQyc,IACVzc,EAAQG,KAAKsc,GAAQzc,EAAQyc,GAC7Bzc,EAAQG,KAAKsc,GAAMjP,KAAOiP,QACnBzc,GAAQyc,IAEfzc,EAAQG,KAAKoe,MACX/Q,KAAMiP,EAGV,IAAI7a,GAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnB6iFxC7B,IAAK,SACLnC,MAAO,SmB3iFFgE,GACLA,EAAUA,MACVA,EAAQG,KAAOH,EAAQG,QACvB,IAAIW,4FAA0Bd,EAE1BA,GAAQyc,UACHzc,GAAQyc,GAEjBzc,EAAQG,KAAKsc,GAAQ,IAErB,IAAI7a,GAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnB8iFxC7B,IAAK,UACLnC,MAAO,SmB5iFDgE,GACNA,EAAUA,KACV,IAAIc,4FAA0Bd,EAE1BA,GAAQ0a,SACV1a,EAAQG,KAAOH,EAAQG,SACvBH,EAAQG,KAAKua,OAAS1a,EAAQ0a,aACvB1a,GAAQ0a,QAGb1a,EAAQhF,OACVgF,EAAQG,KAAOH,EAAQG,SACvBH,EAAQG,KAAKnF,KAAOgF,EAAQhF,WACrBgF,GAAQhF,KAGjB,IAAI4G,GAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnB+iFxC7B,IAAK,SACLnC,MAAO,SmB7iFFgE,GACLA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAE1B4B,EAAaL,UAAaT,CAE9B,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBgjFxC7B,IAAK,gBACLnC,MAAO,SmB9iFKgE,GACZA,EAAUA,KACV,IAAIc,4FAA0Bd,GAC1Bkd,EAAY9iB,KAAKikB,cAAcre,GAE/B4B,EAAaL,UAAaT,EAA1B,aAA6Coc,CAEjD,OADAld,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBijFxC7B,IAAK,oBACLnC,MAAO,SmB/iFSgE,GAChBA,EAAUqa,EAAA/E,EAAA1Z,UAAA0d,WAAAne,OAAAue,eAAApE,EAAA1Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIc,4FAA0Bd,GAE1B4B,EAAaL,UAAaT,EAA1B,QAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MnBkjFxC7B,IAAK,iBACLnC,MAAO,SmBhjFMqR,GACb,OAAO,EAAA+O,EAAAngB,SAAaoR,OnBojFfiI,GmB9/F0B3V,UnBigGnC7F,GAAQmC,QmBjgGaqZ,EnBkgGrBvb,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAqBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCApBhHxC,OAAOC,eAAetB,EAAS,cAC3BkC,OAAO,GAGX,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MoB5jGhiBY,EAAA/D,EAAA,GpBgkGIgE,EAAiBjB,EAAuBgB,GoB/jG5CkgB,EAAAjkB,EAAA,GpBmkGIkkB,EAAsBnhB,EAAuBkhB,GoBlkGjDrO,EAAA5V,EAAA,GpBskGImkB,EAAUphB,EAAuB6S,GoB9jG/BwO,EAA8B,kCAE9BC,EAA0B,8BACXxB,EpB4kGC,WoB3kGlB,QAAAA,GAAYyB,EAAcC,EAAU9d,EAAMqc,EAAcC,EAAWyB,GAAkBvhB,EAAApD,KAAAgjB,GACjFhjB,KAAK4kB,MAAQ,GAAIna,WACjBzK,KAAK+L,KAAOtB,UAAMkF,aAClB3P,KAAKykB,aAAeA,EACpBzkB,KAAKwF,OAASif,EAAajf,OAC3BxF,KAAK4G,KAAOA,EACZ5G,KAAK0kB,SAAWA,EAChB1kB,KAAK2kB,iBAAmBA,GAAoB,GAC5C3kB,KAAK6kB,SACL7kB,KAAK8kB,SACL9kB,KAAK+kB,4BACL/kB,KAAKijB,aAAeA,EACpBjjB,KAAKglB,SACD7e,GAAI,GACJ8e,WACIC,UAAW,GACXC,OAAQ,GACRC,WAAY,GACZzO,OAAQ,GACR2C,MAAO,IAEX+L,UAAW,GACXC,SAAU,EACVC,WAAY,EACZC,eAEJxlB,KAAKylB,uBAAyBvC,EAAUuC,wBAA0B,KAClEzlB,KAAK0lB,uBAAyBxC,EAAUwC,wBAA0B,KAClE1lB,KAAK2lB,qBAAuBzC,EAAUyC,sBAAwB,KAC9D3lB,KAAK4lB,0BAA4B1C,EAAU0C,2BAA6B,KACxE5lB,KAAK6lB,+BAAiC3C,EAAU2C,gCAAkC,KAClF7lB,KAAK8lB,yBAA2B5C,EAAU4C,0BAA4B,KACtE9lB,KAAK+lB,4BAA8B7C,EAAU6C,6BAA+B,KAC5E/lB,KAAKgmB,2BAA6B9C,EAAU8C,4BAA8B,KAC1EhmB,KAAKimB,sBAAwB/C,EAAU+C,uBAAyB,KAChEjmB,KAAKkmB,UACDC,aAAa,EACbC,YAAY,EACZC,UAAU,EACVC,SAAS,EACTC,YAAY,EACZC,eAAe,EACfC,iBAAiB,EACjBC,oBAAqB,EACrBC,mBAAoB,EACpBC,oBAAqB,EACrB5B,YAEJhlB,KAAK6mB,MAAQ,EACb7mB,KAAK8mB,YAAc,EACnB9mB,KAAK+mB,eAAiB,EACtB/mB,KAAKmmB,aAAc,EACnBnmB,KAAKgnB,oBAAqB,EAC1BhnB,KAAKinB,mBAAoB,EACzBjnB,KAAKknB,iBAAmB,IAExB,IAAInnB,GAAOC,IACXA,MAAKmnB,YAAc,SAAUC,GAgBzB,GAfIrnB,EAAKmnB,kBACLG,aAAatnB,EAAKmnB,kBAEtBnnB,EAAKglB,yBAAyBlS,QAAQ,SAAUyU,GACxCA,EAAKhO,OACLgO,EAAKhO,UAGbvZ,EAAKomB,aAAc,EACsB,OAArCpmB,EAAKgmB,8BACLhmB,EAAKmmB,SAASM,eAAgB,EAC9BzmB,EAAKmmB,SAASK,YAAa,EAC3BxmB,EAAKmmB,SAASI,SAAU,EACxBvmB,EAAKwnB,UAAUxnB,EAAKmmB,SAAU3B,IAE9BxkB,EAAKilB,SAAWjlB,EAAKilB,QAAQC,WAAallB,EAAKilB,QAAQC,UAAU3L,MAAO,CACxE,GAAI1T,KAGJ,OAFAA,GAAQ6B,OAAShB,UAAczE,WAAWI,OAC1CwD,EAAQ6S,IAAM1Y,EAAKilB,QAAQC,UAAU3L,MAC9BvZ,EAAKyF,OAAOkC,YAAY,KAAM9B,GAChCoR,KAAK,SAAUyM,GAC4B,OAApC1jB,EAAKimB,4BACLjmB,EAAKynB,yBAETznB,EAAK0nB,aACL1nB,EAAKinB,oBAAqB,IAE7BjQ,MAAM,SAAUpI,GAC2B,OAApC5O,EAAKimB,4BACLjmB,EAAKynB,yBAETznB,EAAK0nB,aACL1nB,EAAKinB,oBAAqB,IAGM,OAApCjnB,EAAKimB,4BACLjmB,EAAKynB,yBAETznB,EAAKinB,oBAAqB,EAC1BjnB,EAAK0nB,cAGbC,iBAAiBlD,EAAyBxkB,KAAKmnB,apBo+GnD,MArZA3jB,GAAawf,IACTjf,IAAK,yBACLnC,MAAO,WoB7kGP,GAAI7B,GAAOC,IACXD,GAAKmmB,SAASM,eAAgB,EAC9BzmB,EAAKmmB,SAASK,YAAa,EAC3BxmB,EAAKmmB,SAASI,SAAU,EACxBvmB,EAAKmmB,SAASE,YAAa,EAC3BrmB,EAAKmmB,SAASC,aAAc,EAC5BpmB,EAAKwnB,UAAUxnB,EAAKmmB,SAjHM,oCpBksG1BniB,IAAK,aACLnC,MAAO,WoB9kGP5B,KAAK2nB,kBACL3nB,KAAKglB,QAAU,KACfhlB,KAAKykB,aAAe,KACpBzkB,KAAKwF,OAAS,KACdxF,KAAK4G,KAAO,KACZ5G,KAAK0kB,SAAW,KAChB1kB,KAAK6kB,MAAQ,KACb7kB,KAAK8kB,MAAQ,KACb9kB,KAAK+kB,yBAA2B,KAChC/kB,KAAKijB,aAAe,KACpBjjB,KAAK6mB,MAAQ,KACb7mB,KAAK8mB,YAAc,KACnB9mB,KAAK+mB,eAAiB,KACtB/mB,KAAKmmB,YAAc,KACnBnmB,KAAKgnB,mBAAqB,KAC1BhnB,KAAKinB,kBAAoB,KACzBjnB,KAAKmnB,YAAc,QpBklGnBpjB,IAAK,eACLnC,MAAO,WoB/kG6B,OAAhC5B,KAAKylB,wBACLiC,iBAjJe,0BAiJsB1nB,KAAKylB,wBAEV,OAAhCzlB,KAAK0lB,wBACLgC,iBAnJe,0BAmJsB1nB,KAAK0lB,wBAEZ,OAA9B1lB,KAAK2lB,sBACL+B,iBArJa,wBAqJsB1nB,KAAK2lB,sBAEL,OAAnC3lB,KAAK4lB,2BACL8B,iBAvJmB,gCAuJsB1nB,KAAK4lB,2BAEN,OAAxC5lB,KAAK6lB,gCACL6B,iBAzJyB,kCAyJsB1nB,KAAK6lB,gCAElB,OAAlC7lB,KAAK8lB,0BACL4B,iBA3JiB,4BA2JsB1nB,KAAK8lB,0BAEP,OAArC9lB,KAAK+lB,6BACL2B,iBAAiBnD,EAA6BvkB,KAAK+lB,6BAEf,OAApC/lB,KAAKgmB,4BACL0B,iBA/JsB,gCA+JsB1nB,KAAKgmB,4BAElB,OAA/BhmB,KAAKimB,uBACLyB,iBA1KgB,2BA0KsB1nB,KAAKimB,0BpBolG/CliB,IAAK,kBACLnC,MAAO,WoBhlG6B,OAAhC5B,KAAKylB,wBACLmC,oBA/Ke,0BA+KyB5nB,KAAKylB,wBAEb,OAAhCzlB,KAAK0lB,wBACLkC,oBAjLe,0BAiLyB5nB,KAAK0lB,wBAEf,OAA9B1lB,KAAK2lB,sBACLiC,oBAnLa,wBAmLyB5nB,KAAK2lB,sBAER,OAAnC3lB,KAAK4lB,2BACLgC,oBArLmB,gCAqLyB5nB,KAAK4lB,2BAET,OAAxC5lB,KAAK6lB,gCACL+B,oBAvLyB,kCAuLyB5nB,KAAK6lB,gCAErB,OAAlC7lB,KAAK8lB,0BACL8B,oBAzLiB,4BAyLyB5nB,KAAK8lB,0BAEhB,OAA/B9lB,KAAKimB,uBACL2B,oBAlMgB,2BAkMyB5nB,KAAKimB,uBAET,OAArCjmB,KAAK+lB,6BACL6B,oBAAoBrD,EAA6BvkB,KAAK8lB,0BAElB,OAApC9lB,KAAKgmB,4BACL4B,oBAhMsB,gCAgMyB5nB,KAAK8lB,0BAExD8B,oBAAoBpD,EAAyBxkB,KAAKmnB,gBpBolGlDpjB,IAAK,YACLnC,MAAO,SoBllGDskB,EAAU2B,GAChB,GAAIvY,GAAQ,GAAIwY,aACZD,GAEIE,QACI7B,SAAUA,GAEd8B,SAAS,EACTC,YAAY,GAGpBC,eAAc5Y,MpBklGdvL,IAAK,eACLnC,MAAO,WoB/kGP5B,KAAKmoB,eACLnoB,KAAKkmB,SAASG,UAAW,EACS,OAA9BrmB,KAAK2lB,sBACL3lB,KAAKunB,UAAUvnB,KAAKkmB,SA5NP,wBA8NjB,IAAItgB,MACA7F,EAAOC,IAoBX,OAnBA4F,GAAQ6B,OAAShB,UAAczE,WAAWE,KACtCnC,EAAK4kB,kBACL/e,EAAQ6S,IAASzY,KAAKykB,aAAanC,YAAnC,UAAwDviB,EAAK4kB,iBAA7D,mBACA/e,EAAQG,MACJqiB,UAAWpoB,KAAK4G,KAAKuF,KACrBkc,UAAWroB,KAAK0kB,YAGpB9e,EAAQ6S,IAASzY,KAAKykB,aAAanC,YAAnC,yBACA1c,EAAQG,MACJO,UAAWtG,KAAKijB,aAAa9c,GAC7BiiB,UAAWpoB,KAAK4G,KAAKuF,KACrBkc,UAAWroB,KAAK0kB,WAInB1kB,KAAKwF,OAAO8W,YAAYuD,WACzBja,EAAQmT,QAAS,GAEd/Y,KAAKwF,OAAOkC,YAAY,KAAM9B,GAChCoR,KAAK,SAAUyM,GACZ,GAAI1jB,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBAgBtC,OAfIud,GAAK/X,OACL+X,EAAOA,EAAK/X,MAEhB3L,EAAKilB,QAAQ7e,GAAKsd,EAAKtd,GACvBpG,EAAKilB,QAAQK,UAAY5B,EAAK6E,mBAC9BvoB,EAAKilB,QAAQM,SAAW7B,EAAK8E,UAC7BxoB,EAAKilB,QAAQO,WAAa9B,EAAK+E,YAC/BzoB,EAAKilB,QAAQC,UAAUC,UAAYzB,EAAKgF,kBAAkBC,WAC1D3oB,EAAKilB,QAAQC,UAAUE,OAAS1B,EAAKgF,kBAAkBtD,OACvDplB,EAAKilB,QAAQC,UAAUG,WAAa3B,EAAKgF,kBAAkBE,YAC3D5oB,EAAKilB,QAAQC,UAAUtO,OAAS8M,EAAKgF,kBAAkB9R,OACvD5W,EAAKilB,QAAQC,UAAU3L,MAAQmK,EAAKgF,kBAAkBnP,MACtDvZ,EAAKmmB,SAASlB,QAAUjlB,EAAKilB,QAE7BjlB,EAAK6oB,aACE7oB,EAAK8oB,kBAEf7R,KAAK,SAAU8N,GACZ,IAAI/kB,EAAKomB,YACT,MAAOpmB,GAAK+oB,iBAEf9R,KAAK,SAAUzJ,GACZ,IAAIxN,EAAKomB,YAiBT,MAhBuC,QAAnCpmB,EAAK6lB,4BACL7lB,EAAKmmB,SAASM,eAAgB,EAC9BzmB,EAAKwnB,UAAUxnB,EAAKmmB,SA9QT,kCAgRuB,OAAlCnmB,EAAK+lB,2BACL/lB,EAAKmmB,SAASK,YAAa,EAC3BxmB,EAAKmmB,SAASE,YAAa,EAC3BrmB,EAAKwnB,UAAUxnB,EAAKmmB,SAjRX,8BAmRuB,OAAhCnmB,EAAK2lB,yBACL3lB,EAAKmmB,SAASK,YAAa,EAC3BxmB,EAAKmmB,SAASE,YAAa,EAC3BrmB,EAAKwnB,UAAUxnB,EAAKmmB,SA1Rb,4BA4RXnmB,EAAK4nB,kBACL5nB,EAAKilB,WACEzX,IAEVwJ,MAAM,SAAUvH,GAYb,GAXsC,OAAlCzP,EAAK+lB,2BACe,qBAAhBtW,EAAIuZ,UACJhpB,EAAKmmB,SAASI,SAAU,EACxBvmB,EAAKmmB,SAASC,aAAc,GAEhCpmB,EAAKmmB,SAASE,YAAa,EAC3BrmB,EAAKwnB,UAAUxnB,EAAKmmB,SAnSX,8BAqSuB,OAAhCnmB,EAAK0lB,wBACL1lB,EAAKwnB,UAAUxnB,EAAKmmB,SA3Sb,4BA6SNnmB,EAAKomB,YAAa,CACnB,GAA+B,kBAApBpmB,GAAKonB,YAGZ,KAAM3X,EAFNzP,GAAKonB,cAKb,KAAM3X,QpBglGdzL,IAAK,aACLnC,MAAO,WoB5kGP,GAAI7B,GAAOC,IACX,IAAID,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBAItC,KAHA,GAAI8iB,GAAYhpB,KAAK4G,KAAKuF,KACtB8c,EAAW,EACX3B,SACG2B,EAAWD,GAAW,CACzB,GAAIjpB,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtC,IACIgjB,GAAmBD,EAAWlpB,EAAKilB,QAAQM,SAAW,CACtD4D,GAAmBF,EAAY,IAC/BE,EAAmBF,EAAY,GAEnC1B,EAAOvnB,EAAK6G,KAAKoG,MAAMic,EAAUA,EAAWlpB,EAAKilB,QAAQM,UACzDvlB,EAAK8kB,MAAMrc,MACP8e,KAAMA,EACN6B,sBAAuBF,EAAvB,IAAmCC,EAAnC,IAAuDnpB,EAAK6G,KAAKuF,KACjEC,OAAQ,GACRgd,UAAU,EACVvC,MAAO,IAEXoC,GAAYlpB,EAAKilB,QAAQM,apBilG7BvhB,IAAK,eACLnC,MAAO,SoB9kGE0lB,GACT,GAAIvnB,GAAOC,IACX,IAAID,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtC,IAAKohB,EAAK8B,SAgFN,MAAO,IAAI/R,SAAQC,OA/EnBgQ,GAAKT,OACL,IAAI5T,GAAOqU,EAAKA,IAChB,OAAOvnB,GAAK0kB,aAAa4E,eAAepW,GACnC+D,KAAK,SAAUsS,GACZ,GAAIvpB,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtCnG,GAAKgnB,iBAC8B,OAA/BhnB,EAAKkmB,wBACLlmB,EAAKmmB,SAASQ,qBAAuB3mB,EAAKgnB,eAAkBhnB,EAAKilB,QAAQO,YAAagE,QAAQ,GAC9FxpB,EAAKwnB,UAAUxnB,EAAKmmB,SA9VhB,6BAgWRoB,EAAKlb,OAASkd,EAAUvd,KACxBhM,EAAKgM,KAAKiK,OAAOsT,EAAU1b,YAC3B,IAAIhI,KAWJ,OAVAA,GAAQ6B,OAAShB,UAAczE,WAAWG,IAC1CyD,EAAQ6S,IAAM1Y,EAAKilB,QAAQC,UAAUG,WACrCxf,EAAQyQ,SACJmT,OAAA,OAAiBF,EAAUvd,KAC3B0d,gBAAiBnC,EAAK6B,aACtBO,eAAgB,4BAEpB9jB,EAAQG,KAAOuhB,EAAKA,KACpB1hB,EAAQuX,eAAgB,EACxBvX,EAAQga,oBAAqB,EACxB7f,EAAKyF,OAAOkC,YAAY,KAAM9B,GAASoR,KASjCjX,EAAKyF,OAAOkC,YAAY,KAAM9B,GAR9B,GAAIyR,SAAQ,SAAUC,EAASC,GAClC,IACID,EAAQvX,EAAKyF,OAAOkC,YAAY,KAAM9B,IACxC,MAAO+I,GACL4I,EAAO5I,QAOtBqI,KAAK,SAAU2S,GAEZ,GADAA,EAAKvS,qBAAsB,EACvBrX,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtC,IAAInG,EAAK0kB,aAAajf,OAAO8W,YAAYuD,UAAY9f,EAAK0kB,aAAajf,OAAO6R,QAAQuS,MAAO,CACzF,GAAIC,GAAY9pB,EAAK0kB,aAAajf,OAAO6R,QAAQuS,QAC7CE,EAAS,SAAUC,GACnBF,EAAUvS,QAAQyS,GAGtB,OADAhqB,GAAKglB,yBAAyBvc,MAAO8Q,MAAOwQ,IACrC/pB,EAAK0kB,aAAajf,OAAO8W,YAAY0N,IAAIL,EAAKlR,IAAKkR,EAAK5jB,MAC3DsQ,QAASsT,EAAKtT,QACd4T,QAASJ,EAAUxQ,UAGvBsQ,EAAK5Q,QAAS,EACd4Q,EAAKvQ,mBAAoB,CACzB,IAAIH,GAAUlZ,EAAK0kB,aAAajf,OAAO8W,YAAYqN,EAEnD,OADA5pB,GAAKglB,yBAAyBvc,MAAO8Q,MAAOL,EAAQK,QAC7CL,EAAQI,UAGtBtC,MAAM,SAAUpI,GACb,IAAIA,IAAKA,EAAEgI,QAAuB,MAAbhI,EAAEgI,QAAmB5W,EAAKomB,YAK3C,KAAMxX,EAJN,IAAI2Y,EAAKT,MAAQ,EACb,MAAO9mB,GAAKmqB,aAAa5C,KAMpCtQ,KAAK,SAAUyM,GACZ,GAAI1jB,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtCnG,GAAK+mB,cAC8B,OAA/B/mB,EAAKkmB,wBACLlmB,EAAKmmB,SAASS,oBAAsB5mB,EAAK+mB,YAAe/mB,EAAKilB,QAAQO,YAAagE,QAAQ,GAC1FxpB,EAAKwnB,UAAUxnB,EAAKmmB,SA5ZhB,6BA8ZJzC,EAAK/X,OACL+X,EAAOA,EAAK/X,MAEhB4b,EAAK7Q,SAAWgN,EAChB6D,EAAK8B,UAAW,OpBilG5BrlB,IAAK,gBACLnC,MAAO,WoB1kGP,GAAI7B,GAAOC,IACX,IAAID,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBAKtC,OAJAlG,MAAK6kB,MAAMhS,QAAQ,SAAUyU,GACzB,GAAIvnB,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtCnG,GAAK+kB,MAAMtc,KAAKzI,EAAKmqB,aAAa5C,MAE/BjQ,QAAQ3E,IAAI3S,EAAK+kB,UpB8kGxB/gB,IAAK,eACLnC,MAAO,SoB5kGEuoB,EAAgBC,GAAiB,GAAAnV,GAAAjV,IAC1C,OAAO,IAAIqX,SAAQ,SAACC,EAASC,GACzB,GAAIxX,GAAOkV,CAEX,IAAIlV,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtC,IAAImkB,MACAte,EAAO,EACX,IAAIoe,EACApe,EAAOoe,MACJ,CACH,GAAM/d,GAASrM,EAAKgM,KAAKK,QACzBL,IAAO,EAAAsY,EAAAxiB,SAAkBuK,GAEzBge,EACAC,EAAeD,GAEfrqB,EAAKknB,mBAAoB,EACzBhS,EAAK4P,MAAMhS,QAAQ,SAAUyU,GACzB,GAAIvnB,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,qBAChB,IAAlBohB,EAAK8B,WACLrpB,EAAKknB,mBAAoB,EACzBlnB,EAAKonB,iBAGbpnB,EAAK8kB,MAAMhS,QAAQ,SAAUyU,GACpBA,GAASA,EAAK7Q,UAAa6Q,EAAK7Q,SAAS6Q,MAC1CvnB,EAAKonB,cAETkD,EAAa7hB,KAAK8e,EAAK7Q,SAAS6Q,QAGxC,IAAI1hB,KAYJ,OAXAA,GAAQuX,eAAgB,EACxBvX,EAAQ6B,OAAShB,UAAczE,WAAWE,KAC1C0D,EAAQ6S,IAAM1Y,EAAKilB,QAAQC,UAAUE,OACrCvf,EAAQyQ,SACJmT,OAAA,OAAiBzd,GAErBnG,EAAQG,KAAOgN,KAAKC,WAChB6R,MAAOwF,IAEXzkB,EAAQwR,qBAAsB,EAC9BxR,EAAQmT,QAAS,EACVhZ,EAAKyF,OAAOkC,YAAY,KAAM9B,GAChCoR,KAAK,SAAUyM,GACZ,GAAIA,EAAK9M,QAAyB,KAAf8M,EAAK9M,OAAe,CACnC,GAAI5W,EAAKomB,YAAa,KAAM,IAAIjgB,OAAM,mBACtC,IAAIokB,SASJ,OAPIA,GADA7G,GAAQA,EAAKpN,SAAmC,kBAAjBoN,GAAKpN,QACrBoN,EAAKpN,UAAU,eACvBoN,GAAQA,EAAKpN,SAAWoN,EAAKpN,QAAQ,eAC7BoN,EAAKpN,QAAQ,eAEb,GAEnBiU,GAAgB,IACT,GAAIjT,SAAQ,SAACC,EAASC,GACzBxX,EAAKwqB,MAAMD,GACNtT,KAAK,iBAAMM,GAAQvX,EAAK+oB,aAAa/c,EAAMse,QAGpD,MAAOhT,SAAQC,QAAQmM,KAG9BzM,KAAK,SAACyM,GAAD,MAAUnM,GAAQmM,UpBmlGhC1f,IAAK,QACLnC,MAAO,SoBhlGL4oB,GACF,GAAIzqB,GAAOC,IAKX,OAJ4C,QAAxCD,EAAK8lB,iCACL9lB,EAAKmmB,SAASU,oBAAsB4D,EAAI,IACxCzqB,EAAKwnB,UAAUxnB,EAAKmmB,SAtfK,oCAwftB,GAAI7O,SAAQ,SAAUC,GACzBvX,EAAKmnB,iBAAmBuD,WAAWnT,EAASkT,SpBqlG7CxH,IAGXtjB,GAAQmC,QoB5kHamhB,EpB6kHrBrjB,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAmBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAhBvFpC,OAAOC,eAAetB,EAAS,cAC3BkC,OAAO,GqBnmHX,IAAAmU,GAAA5V,EAAA,GrBwmHImkB,EAAUphB,EAAuB6S,GqBvmHrCqO,EAAAjkB,EAAA,GrB2mHIkkB,EAAsBnhB,EAAuBkhB,GqB1mHjDsG,EAAAvqB,EAAA,IrB8mHIwqB,EAAuBznB,EAAuBwnB,EAIlDhrB,GAAQmC,QqBjnHO,SAACoR,GACZ,MAAO,IAAIoE,SAAQ,SAACC,EAASC,IACpB,EAAAoT,EAAA9oB,YAAsB0V,EAAO,GAAIrR,OAAM,4CAC5C,KACI,GAAI6I,GAAS,GAAIC,WACjBD,GAAO8J,OAAS,SAACuO,GACb,IAAKA,IAAQA,EAAI1jB,SAAW0jB,EAAI1jB,OAAO6J,OAEnC,WADAgK,IAGJ,IAAIqN,GAAQ,GAAIna,UAChB6M,IACIvL,MAAM,EAAAsY,EAAAxiB,SAAkB+iB,EAAM5Y,UAAUob,EAAI1jB,OAAO6J,QAAQ7D,QAC3DkE,YAAawZ,EAAI1jB,OAAO6J,UAIhCwB,EAAOI,kBAAkB8D,GAC3B,MAAOtE,GACL4I,EAAO5I,OrBsnHnBhP,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAeA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAZvFpC,OAAOC,eAAetB,EAAS,cAC3BkC,OAAO,GsBtpHX,IAAAmU,GAAA5V,EAAA,GtB2pHImkB,EAAUphB,EAAuB6S,GsB1pHrC2U,EAAAvqB,EAAA,ItB8pHIwqB,EAAuBznB,EAAuBwnB,EAKlDhrB,GAAQmC,QsBlqHO,SAACoR,GACZ,MAAO,IAAIoE,SAAQ,SAACC,EAASC,IACpB,EAAAoT,EAAA9oB,YAAsB0V,EAAO,GAAIrR,OAAM,4CAC5C,KACI,GAAI6I,GAAS,GAAIC,WACjBD,GAAO8J,OAAS,SAACuO,GACb,IAAKA,IAAQA,EAAI1jB,SAAW0jB,EAAI1jB,OAAO6J,OAEnC,WADAgK,IAGJ,IAAIqN,GAAQ,GAAIna,UAChB6M,GAASsN,EAAMtY,iBAAiB8a,EAAI1jB,OAAO6J,UAG/CwB,EAAOI,kBAAkB8D,GAC3B,MAAOtE,GACL4I,EAAO5I,OtBsqHnBhP,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAGAY,QAAOC,eAAetB,EAAS,cAC7BkC,OAAO,IAGTlC,EAAQmC,QuBrsHO,WACb,SAASqR,QAAUA,OAAO0X,UAAaA,WvBwsHzCjrB,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YA+BA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAlCjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,IwBxtH5dhc,EAAA/D,EAAA,GxB4tHIgE,EAAiBjB,EAAuBgB,GwB3tH5CU,EAAAzE,EAAA,GxB+tHI0E,EAAyB3B,EAAuB0B,GwB9tHpDE,EAAA3E,EAAA,GxBkuHI4E,EAAsB7B,EAAuB4B,GwBjuHjDJ,EAAAvE,EAAA,GxBquHIwE,EAAwBzB,EAAuBwB,GwBpuHnD6b,EAAApgB,EAAA,GxBwuHIqgB,EAAYtd,EAAuBqd,GwBruHjCvb,GACJkL,IAAK,MACLwQ,OAAQ,SACRC,GAAI,YACJF,KAAM,OACNG,YAAa,eAGMzF,ExBgvHN,SAAUiG,GwB/uHvB,QAAAjG,GAAY3V,GAAQpC,EAAApD,KAAAmb,EAAA,IAAAlG,GAAA0J,EAAA3e,MAAAmb,EAAA+D,WAAAne,OAAAue,eAAAnE,IAAA3a,KAAAR,KACZgF,GADY,OAElBiQ,GAAKzP,OAASA,EAFIyP,ExB01HpB,MA1GA4J,GAAU1D,EAAUiG,GAWpB5d,EAAa2X,IACXpX,IAAK,gBACLnC,MAAO,SwBxvHKgE,GACZ,GAAIO,wFAAkBP,EActB,OAZIA,GAAQilB,UACVjlB,EAAQklB,SAAWllB,EAAQilB,cACpBjlB,GAAQilB,SAGbjlB,EAAQklB,UAAYllB,EAAQklB,SAAS3kB,GACvCA,EAAKP,EAAQklB,SAAS3kB,IACbP,EAAQmlB,WAAanlB,EAAQolB,eACtC7kB,EAAKP,EAAQmlB,WAAanlB,EAAQolB,YACjCplB,EAAQmlB,gBAAoBnlB,GAAQmlB,gBAAmBnlB,GAAQolB,aAElE/K,EAAA9E,EAAA3Z,UAAA0d,WAAAne,OAAAue,eAAAnE,EAAA3Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,GACjBA,KxB2vHPpC,IAAK,cACLnC,MAAO,SwBzvHGgE,EAASH,EAAQI,EAAgBC,GAC3CD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EAErCF,EAAQilB,UACVjlB,EAAQklB,SAAWllB,EAAQilB,cACpBjlB,GAAQilB,SAGbjlB,EAAQklB,UACLjlB,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQilB,QAASplB,GACxDK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQilB,QAAS7qB,KAAK2F,kBACpEC,EAAQG,MAAO,EAAAhB,EAAAlD,SAAkB+D,EAAQilB,QAAS7qB,KAAK0F,kBAChDE,GAAQklB,UAEf7K,EAAA9E,EAAA3Z,UAAA0d,WAAAne,OAAAue,eAAAnE,EAAA3Z,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,MxBiwHnD/B,IAAK,MACLnC,MAAO,SwB9vHLgE,GACFA,EAAUqa,EAAA9E,EAAA3Z,UAAA0d,WAAAne,OAAAue,eAAAnE,EAAA3Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAImlB,GAAY/qB,KAAKirB,cAAcrlB,GAC/B4B,EAAaL,cAAa4jB,CAE9B,OADAnlB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MxBiwHxC7B,IAAK,SACLnC,MAAO,SwB/vHFgE,GAEL,GADAA,EAAUA,OACL5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmB3b,WAAWwK,IAAKxK,WAAWgb,OAAQhb,WAAWib,IACnE9a,EAAiBqlB,iBAAiBtlB,EAASa,UAAcnE,MAAMC,mBAAoB,EACnFuD,EAAoBolB,iBAAiBtlB,EAASa,UAAcnE,MAAME,uBAAwB,CAEzFxC,MAAKwF,OAAOsW,qBACf9b,KAAKmrB,YAAYvlB,EAASyb,EAAiBxb,EAAgBC,GAK/D,MADAF,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAzEL,aAyE0B9B,MxBkwHxC7B,IAAK,SACLnC,MAAO,SwBhwHFgE,GACLA,EAAUA,KACV,IAAImlB,GAAY/qB,KAAKirB,cAAcrlB,EACnC,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,GAAiBqlB,iBAAiBtlB,EAASa,UAAcnE,MAAMC,mBAAoB,EACnFuD,EAAoBolB,iBAAiBtlB,EAASa,UAAcnE,MAAME,uBAAwB,CAE9FxC,MAAKmrB,YAAYvlB,KAAaC,EAAgBC,GAEhD,GAAI0B,GAAaL,cAAa4jB,CAE9B,OADAnlB,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MxBmwHxC7B,IAAK,SACLnC,MAAO,SwBjwHFgE,GACLA,EAAUA,KACV,IAAImlB,GAAY/qB,KAAKirB,cAAcrlB,GAC/B4B,EAAaL,cAAa4jB,CAE9B,OADAnlB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,OxBqwHnCuV,GwB31H6B5V,UxB81HtC7F,GAAQmC,QwB91HasZ,ExB+1HrBxb,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAmBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAtBjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,IyB73H5dhc,EAAA/D,EAAA,GzBi4HIgE,EAAiBjB,EAAuBgB,GyBh4H5Cqc,EAAApgB,EAAA,GzBo4HIqgB,EAAYtd,EAAuBqd,GyBl4HjCpZ,EAAY,kBACZnC,GACJomB,OAAQ,SACRC,KAAM,OACNC,UAAW,YACXC,QAAS,UACTC,cAAe,gBACfC,iBAAkB,mBAClBC,mBAAoB,qBACpBC,oBAAqB,sBACrBC,KAAM,QAIaxQ,EzB24HA,SAAUgG,GyB14H7B,QAAAhG,GAAY5V,GAAQ,MAAApC,GAAApD,KAAAob,GAAAuD,EAAA3e,MAAAob,EAAA8D,WAAAne,OAAAue,eAAAlE,IAAA5a,KAAAR,KACZwF,EAAQR,IzBm+HhB,MAzFA6Z,GAAUzD,EAAgBgG,GAQ1B5d,EAAa4X,IACXrX,IAAK,sBACLnC,MAAO,SyBj5HWgE,GAClB,GAAIO,wFAAkBP,EAQtB,OAPIA,GAAQimB,iBAAmBjmB,EAAQkmB,kBACrC3lB,EAAKP,EAAQimB,iBAAmBjmB,EAAQkmB,iBACvClmB,EAAQimB,sBAA0BjmB,GAAQimB,sBAAyBjmB,GAAQkmB,kBACnElmB,EAAQmmB,eAAiBnmB,EAAQmmB,cAAc5lB,KACxDA,EAAKP,EAAQmmB,cAAc5lB,IAE7B8Z,EAAA7E,EAAA5Z,UAAA0d,WAAAne,OAAAue,eAAAlE,EAAA5Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,GACjBA,KzBo5HPpC,IAAK,oBACLnC,MAAO,SyBl5HSgE,EAASH,EAAQI,EAAgBC,GACjDD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EACrCF,EAAQmmB,eACLlmB,GAAkBoa,EAAA7E,EAAA5Z,UAAA0d,WAAAne,OAAAue,eAAAlE,EAAA5Z,WAAA,uBAAAxB,MAAAQ,KAAAR,KAA2B4F,EAAQmmB,cAAetmB,GACpEK,GAAqBma,EAAA7E,EAAA5Z,UAAA0d,WAAAne,OAAAue,eAAAlE,EAAA5Z,WAAA,sBAAAxB,MAAAQ,KAAAR,KAA0B4F,EAAQmmB,cAAe/rB,KAAK2F,kBAChFC,EAAQG,KAARka,EAAA7E,EAAA5Z,UAAA0d,WAAAne,OAAAue,eAAAlE,EAAA5Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAuC4F,EAAQomB,QAAShsB,KAAK0F,WAAYI,SAClEF,GAAQmmB,eAEf9L,EAAA7E,EAAA5Z,UAAA0d,WAAAne,OAAAue,eAAAlE,EAAA5Z,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,MzB05HnD/B,IAAK,MACLnC,MAAO,SyBv5HLgE,GACFA,EAAUqa,EAAA7E,EAAA5Z,UAAA0d,WAAAne,OAAAue,eAAAlE,EAAA5Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIimB,GAAkB7rB,KAAKisB,oBAAoBrmB,GAC3C4B,EAAaL,EAAb,IAA0B0kB,CAE9B,OADAjmB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MzB05HxC7B,IAAK,SACLnC,MAAO,SyBx5HFgE,GAEL,GADAA,EAAUA,OACL5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmBrc,EAAaqmB,KAAMrmB,EAAaumB,QAASvmB,EAAasmB,UAAWtmB,EAAawmB,cAAexmB,EAAa4mB,MAC/H/lB,mGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKksB,kBAAkBtmB,EAASyb,EAAiBxb,EAAgBC,GAInE,MADAF,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAFfF,kBAEoC5B,MzB25HxC7B,IAAK,SACLnC,MAAO,SyBz5HFgE,GACLA,EAAUA,KACV,IAAIimB,GAAkB7rB,KAAKisB,oBAAoBrmB,EAC/C,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKksB,kBAAkBtmB,KAAaC,EAAgBC,GAEtD,GAAI0B,GAAaL,EAAb,IAA0B0kB,CAE9B,OADAjmB,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,MzB45HxC7B,IAAK,SACLnC,MAAO,SyB15HFgE,GACLA,EAAUA,KACV,IAAIimB,GAAkB7rB,KAAKisB,oBAAoBrmB,GAC3C4B,EAAaL,EAAb,IAA0B0kB,CAE9B,OADAjmB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,OzB85HnCwV,GyBr+HmC7V,UzBw+H5C7F,GAAQmC,QyBx+HauZ,EzBy+HrBzb,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAmBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAtBjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,I0BzgI5dhc,EAAA/D,EAAA,G1B6gIIgE,EAAiBjB,EAAuBgB,G0B5gI5Cqc,EAAApgB,EAAA,G1BghIIqgB,EAAYtd,EAAuBqd,G0B7gIjCvb,KAEeqW,E1BwhIH,SAAU+F,G0BvhI1B,QAAA/F,GAAY7V,GAAQ,MAAApC,GAAApD,KAAAqb,GAAAsD,EAAA3e,MAAAqb,EAAA6D,WAAAne,OAAAue,eAAAjE,IAAA7a,KAAAR,KACZwF,EAAQR,I1B+jIhB,MAxCA6Z,GAAUxD,EAAa+F,GAQvB5d,EAAa6X,IACXtX,IAAK,mBACLnC,MAAO,S0B9hIQgE,GACf,GAAIO,wFAAkBP,EAQtB,OAPIA,GAAQumB,cAAgBvmB,EAAQwmB,eAClCjmB,EAAKP,EAAQumB,cAAgBvmB,EAAQwmB,cACpCxmB,EAAQumB,mBAAuBvmB,GAAQumB,mBAAsBvmB,GAAQwmB,eAC7DxmB,EAAQymB,YAAczmB,EAAQymB,WAAWlmB,KAClDA,EAAKP,EAAQymB,WAAWlmB,IAE1B8Z,EAAA5E,EAAA7Z,UAAA0d,WAAAne,OAAAue,eAAAjE,EAAA7Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,GACjBA,K1BiiIPpC,IAAK,MACLnC,MAAO,S0B/hILgE,GACFA,EAAUqa,EAAA5E,EAAA7Z,UAAA0d,WAAAne,OAAAue,eAAAjE,EAAA7Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIumB,GAAensB,KAAKssB,iBAAiB1mB,GACrC4B,EAAaL,gBAAaglB,EAA1B,QAEJ,OADAvmB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M1BkiIxC7B,IAAK,SACLnC,MAAO,S0BhiIFgE,GACLA,EAAUA,KAGV,OADAA,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAhCL,eAgC0B9B,O1BoiInCyV,G0BjkIgC9V,U1BokIzC7F,GAAQmC,Q0BpkIawZ,E1BqkIrB1b,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAmBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAtBjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,I2B1lI5dhc,EAAA/D,EAAA,G3B8lIIgE,EAAiBjB,EAAuBgB,G2B7lI5Cqc,EAAApgB,EAAA,G3BimIIqgB,EAAYtd,EAAuBqd,G2B9lIjCvb,GACJqmB,KAAM,OACNC,UAAW,YACXC,QAAS,UACTgB,eAAgB,iBAChBC,QAAS,WAGUlR,E3BymIN,SAAU8F,G2BxmIvB,QAAA9F,GAAY9V,GAAQ,MAAApC,GAAApD,KAAAsb,GAAAqD,EAAA3e,MAAAsb,EAAA4D,WAAAne,OAAAue,eAAAhE,IAAA9a,KAAAR,KACZwF,EAAQR,I3BisIhB,MAzFA6Z,GAAUvD,EAAU8F,GAQpB5d,EAAa8X,IACXvX,IAAK,gBACLnC,MAAO,S2B/mIKgE,GACZ,GAAIO,wFAAkBP,EAQtB,OAPIA,GAAQ6mB,WAAa7mB,EAAQ8mB,YAC/BvmB,EAAKP,EAAQ6mB,WAAa7mB,EAAQ8mB,WACjC9mB,EAAQ6mB,gBAAoB7mB,GAAQ6mB,gBAAmB7mB,GAAQ8mB,YACvD9mB,EAAQomB,SAAWpmB,EAAQomB,QAAQ7lB,KAC5CA,EAAKP,EAAQomB,QAAQ7lB,IAEvB8Z,EAAA3E,EAAA9Z,UAAA0d,WAAAne,OAAAue,eAAAhE,EAAA9Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,EAAIM,UAAc1D,QAAS0D,UAAczD,YAC1DmD,K3BknIPpC,IAAK,cACLnC,MAAO,S2BhnIGgE,EAASH,EAAQI,EAAgBC,GAC3CD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EACrCF,EAAQomB,SACLnmB,GAAkBoa,EAAA3E,EAAA9Z,UAAA0d,WAAAne,OAAAue,eAAAhE,EAAA9Z,WAAA,uBAAAxB,MAAAQ,KAAAR,KAA2B4F,EAAQomB,QAASvmB,GAC9DK,GAAqBma,EAAA3E,EAAA9Z,UAAA0d,WAAAne,OAAAue,eAAAhE,EAAA9Z,WAAA,sBAAAxB,MAAAQ,KAAAR,KAA0B4F,EAAQomB,QAAShsB,KAAK2F,kBAC1EC,EAAQG,KAARka,EAAA3E,EAAA9Z,UAAA0d,WAAAne,OAAAue,eAAAhE,EAAA9Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAuC4F,EAAQomB,QAAShsB,KAAK0F,WAAYI,SAClEF,GAAQomB,SAEf/L,EAAA3E,EAAA9Z,UAAA0d,WAAAne,OAAAue,eAAAhE,EAAA9Z,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,M3BwnInD/B,IAAK,MACLnC,MAAO,S2BrnILgE,GACFA,EAAUqa,EAAA3E,EAAA9Z,UAAA0d,WAAAne,OAAAue,eAAAhE,EAAA9Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAI6mB,GAAYzsB,KAAK2sB,cAAc/mB,GAC/B4B,EAAaL,aAAaslB,CAE9B,OADA7mB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M3BwnIxC7B,IAAK,SACLnC,MAAO,S2BtnIFgE,GAEL,GADAA,EAAUA,OACL5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmBrc,EAAaqmB,KAAMrmB,EAAaumB,QAASvmB,EAAasmB,UAAWtmB,EAAawnB,SACnG3mB,mGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK4sB,YAAYhnB,EAASyb,EAAiBxb,EAAgBC,GAI7D,MADAF,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YA1DL,YA0D0B9B,M3BynIxC7B,IAAK,SACLnC,MAAO,S2BvnIFgE,GACLA,EAAUA,KACV,IAAI6mB,GAAYzsB,KAAK2sB,cAAc/mB,EACnC,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK4sB,YAAYhnB,GAAUZ,EAAawnB,SAAU3mB,EAAgBC,GAEpE,GAAI0B,GAAaL,aAAaslB,CAE9B,OADA7mB,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M3B0nIxC7B,IAAK,SACLnC,MAAO,S2BxnIFgE,GACLA,EAAUqa,EAAA3E,EAAA9Z,UAAA0d,WAAAne,OAAAue,eAAAhE,EAAA9Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAI6mB,GAAYzsB,KAAK2sB,cAAc/mB,GAC/B4B,EAAaL,aAAaslB,CAE9B,OADA7mB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,O3B4nInC0V,G2BnsI6B/V,U3BssItC7F,GAAQmC,Q2BtsIayZ,E3BusIrB3b,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YA2BA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GA9Bjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,I4BluI5dhc,EAAA/D,EAAA,G5BsuIIgE,EAAiBjB,EAAuBgB,G4BruI5CU,EAAAzE,EAAA,G5ByuII0E,EAAyB3B,EAAuB0B,G4BxuIpDF,EAAAvE,EAAA,G5B4uIIwE,EAAwBzB,EAAuBwB,G4B3uInD6b,EAAApgB,EAAA,G5B+uIIqgB,EAAYtd,EAAuBqd,G4B3uIjCvb,GACJyb,KAAM,OACNoM,WAAY,aACZC,yBAA0B,2BAC1BlM,YAAa,cACbmM,mBAAoB,qBACpBC,yBAA0B,2BAC1BC,KAAM,OACNC,QAAS,UACTC,MAAO,QACPC,SAAU,WACVxB,KAAM,QAGarQ,E5BuvIR,SAAU6F,G4BtvIrB,QAAA7F,GAAY/V,GAAQ,MAAApC,GAAApD,KAAAub,GAAAoD,EAAA3e,MAAAub,EAAA2D,WAAAne,OAAAue,eAAA/D,IAAA/a,KAAAR,KACZwF,EAAQR,I5Bu5IhB,MAjKA6Z,GAAUtD,EAAQ6F,GAQlB5d,EAAa+X,IACXxX,IAAK,cACLnC,MAAO,S4B7vIGgE,GACV,GAAIO,wFAAkBP,EAQtB,OAPIA,GAAQynB,SAAWznB,EAAQ0nB,UAC7BnnB,EAAKP,EAAQynB,SAAWznB,EAAQ0nB,SAC/B1nB,EAAQynB,cAAkBznB,GAAQynB,cAAiBznB,GAAQ0nB,UACnD1nB,EAAQ2nB,OAAS3nB,EAAQ2nB,MAAMpnB,KACxCA,EAAKP,EAAQ2nB,MAAMpnB,IAErB8Z,EAAA1E,EAAA/Z,UAAA0d,WAAAne,OAAAue,eAAA/D,EAAA/Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,GACjBA,K5BgwIPpC,IAAK,wBACLnC,MAAO,S4B9vIagE,GACpB,GAAIO,wFAAkBP,EAQtB,OAPIA,GAAQ4nB,mBAAqB5nB,EAAQ6nB,qBACvCtnB,EAAKP,EAAQ4nB,mBAAqB5nB,EAAQ6nB,oBACzC7nB,EAAQ4nB,wBAA4B5nB,GAAQ4nB,wBAA2B5nB,GAAQ6nB,sBACtE7nB,EAAQ8nB,iBAAmB9nB,EAAQ8nB,gBAAgBvnB,IAAQP,EAAQ+nB,kBAAoB/nB,EAAQ+nB,iBAAiBxnB,MAC1HA,EAAKP,EAAQ8nB,gBAAgBvnB,IAAMP,EAAQ+nB,iBAAiBxnB,IAE9D8Z,EAAA1E,EAAA/Z,UAAA0d,WAAAne,OAAAue,eAAA/D,EAAA/Z,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,GACjBA,K5BiwIPpC,IAAK,YACLnC,MAAO,S4B/vICgE,EAASH,EAAQI,EAAgBC,GACzCD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EACrCF,EAAQ2nB,OACL1nB,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQ2nB,MAAO9nB,GACtDK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQ2nB,MAAOvtB,KAAK2F,kBAClEC,EAAQG,KAAO6nB,kBAAkBhoB,EAAQ2nB,MAAOvtB,KAAK0F,WAAYI,SAC1DF,GAAQ2nB,OAEftN,EAAA1E,EAAA/Z,UAAA0d,WAAAne,OAAAue,eAAA/D,EAAA/Z,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,M5BuwInD/B,IAAK,sBACLnC,MAAO,S4BpwIWgE,EAASH,EAAQI,EAAgBC,GACnDD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EAErCF,EAAQ8nB,kBACV9nB,EAAQ+nB,iBAAmB/nB,EAAQ8nB,sBAC5B9nB,GAAQ8nB,iBAGb9nB,EAAQ+nB,kBACL9nB,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQ+nB,iBAAkBloB,GACjEK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQ+nB,iBAAkB3tB,KAAK2F,kBAC7EC,EAAQG,KAAO6nB,kBAAkBhoB,EAAQ+nB,iBAAkB3tB,KAAK0F,WAAYI,SACrEF,GAAQ+nB,kBAEf1N,EAAA1E,EAAA/Z,UAAA0d,WAAAne,OAAAue,eAAA/D,EAAA/Z,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,M5B4wInD/B,IAAK,MACLnC,MAAO,S4BzwILgE,GACFA,EAAUqa,EAAA1E,EAAA/Z,UAAA0d,WAAAne,OAAAue,eAAA/D,EAAA/Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIynB,GAAUrtB,KAAK6tB,YAAYjoB,GAC3B4B,EAAaL,WAAakmB,CAE9B,OADAznB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M5B4wIxC7B,IAAK,SACLnC,MAAO,S4B1wIFgE,GACLA,EAAUA,KAGV,OADAA,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAzFL,UAyF0B9B,M5B6wIxC7B,IAAK,SACLnC,MAAO,S4B3wIFgE,GACLA,EAAUA,KACV,IAAIynB,GAAUrtB,KAAK6tB,YAAYjoB,EAC/B,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK8tB,UAAUloB,KAAaC,EAAgBC,GAE9C,GAAI0B,GAAaL,WAAakmB,CAE9B,OADAznB,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M5B8wIxC7B,IAAK,gBACLnC,MAAO,S4B5wIKgE,GACZA,EAAUqa,EAAA1E,EAAA/Z,UAAA0d,WAAAne,OAAAue,eAAA/D,EAAA/Z,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAI4nB,GAAoBxtB,KAAK+tB,sBAAsBnoB,GAC/C4B,EAAawmB,sBAAwBR,CAEzC,OADA5nB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M5B+wIxC7B,IAAK,mBACLnC,MAAO,S4B7wIQgE,GACfA,EAAUA,KACV,IAAI4nB,GAAoBxtB,KAAK+tB,sBAAsBnoB,EACnD,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKiuB,oBAAoBroB,KAAaC,EAAgBC,GAExD,GAAI0B,GAAawmB,sBAAwBR,CAEzC,OADA5nB,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M5BgxIxC7B,IAAK,mBACLnC,MAAO,S4B9wIQgE,GACfA,EAAUA,KACV,IAAI4nB,GAAoBxtB,KAAK+tB,sBAAsBnoB,GAC/C4B,EAAawmB,sBAAwBR,CAEzC,OADA5nB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M5BixIxC7B,IAAK,yBACLnC,MAAO,S4B/wIcgE,GACrBA,EAAUA,KACV,IAAIynB,GAAUrtB,KAAK6tB,YAAYjoB,GAC3B4B,EAAaL,WAAakmB,EAA1B,cAEJ,OADAznB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M5BkxIxC7B,IAAK,4BACLnC,MAAO,S4BhxIiBgE,GACxBA,EAAUA,KACV,IAAIynB,GAAUrtB,KAAK6tB,YAAYjoB,GAC3B4B,EAAaL,WAAakmB,EAA1B,iBAEJ,OADAznB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,O5BoxInC2V,G4Bz5I2BhW,U5B45IpC7F,GAAQmC,Q4B55Ia0Z,E5B65IrB5b,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YA+BA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAlCjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,I6Bj8I5dhc,EAAA/D,EAAA,G7Bq8IIgE,EAAiBjB,EAAuBgB,G6Bp8I5CU,EAAAzE,EAAA,GACA2E,G7Bu8I6B5B,EAAuB0B,G6Bv8IpDzE,EAAA,IACAuE,G7B08I0BxB,EAAuB4B,G6B18IjD3E,EAAA,IACAogB,G7B68I4Brd,EAAuBwB,G6B78InDvE,EAAA,I7Bi9IIqgB,EAAYtd,EAAuBqd,G6B58IjCvb,KAEewW,E7By9IN,SAAU4F,G6Bx9IvB,QAAA5F,GAAYhW,GAAQ,MAAApC,GAAApD,KAAAwb,GAAAmD,EAAA3e,MAAAwb,EAAA0D,WAAAne,OAAAue,eAAA9D,IAAAhb,KAAAR,KACZwF,EAAQR,I7BinJhB,MAzJA6Z,GAAUrD,EAAU4F,GAQpB5d,EAAagY,IACXzX,IAAK,MACLnC,MAAO,S6B/9ILgE,GACFA,EAAUA,KACV,IAAIiB,2FAAwBjB,GACxBkB,gGAAoClB,GACpC4B,EAAaL,uBAAaN,EAA1B,IAAmCC,EAAnC,SAEJ,OADAlB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7Bk+IxC7B,IAAK,eACLnC,MAAO,S6Bh+IIgE,GACXA,EAAUA,KACV,IAAIiB,2FAAwBjB,GACxB4B,EAAaL,uBAAaN,CAE9B,OADAjB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7Bm+IxC7B,IAAK,oBACLnC,MAAO,S6Bj+ISgE,GAChBA,EAAUA,KACV,IAAIQ,8FAA8BR,GAC9BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa0mB,YAA6B9nB,EAA1C,aAA+DS,EAA/D,IAAwEC,CAE5E,OADAlB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7Bo+IxC7B,IAAK,uBACLnC,MAAO,S6Bl+IYgE,GACnBA,EAAUA,KACV,IAAIQ,8FAA8BR,GAE9B4B,EAAa0mB,YAA6B9nB,EAA1C,WAEJ,OADAR,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7Bq+IxC7B,IAAK,kBACLnC,MAAO,S6Bn+IOgE,GACdA,EAAUA,KACV,IAAIc,4FAA0Bd,GAC1BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa2mB,UAA2BznB,EAAxC,aAA2DG,EAA3D,IAAoEC,CAExE,OADAlB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7Bs+IxC7B,IAAK,qBACLnC,MAAO,S6Bp+IUgE,GACjBA,EAAUA,KACV,IAAIc,4FAA0Bd,GAE1B4B,EAAa2mB,UAA2BznB,EAAxC,WAEJ,OADAd,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7Bu+IxC7B,IAAK,uBACLnC,MAAO,S6Br+IYgE,GACnBA,EAAUA,KACV,IAAIQ,8FAA8BR,GAC9BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa0mB,YAA6B9nB,EAA1C,aAA+DS,EAA/D,IAAwEC,CAI5E,OAHAlB,GAAQ6B,OAAShB,UAAczE,WAAWE,KAC1C0D,EAAQyQ,QAAUzQ,EAAQyQ,YAC1BzQ,EAAQyQ,QAAQ,gBAAkB,mBAC3BrW,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7Bw+IxC7B,IAAK,qBACLnC,MAAO,S6Bt+IUgE,GACjBA,EAAUA,KACV,IAAIc,4FAA0Bd,GAC1BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa2mB,UAA2BznB,EAAxC,aAA2DG,EAA3D,IAAoEC,CAIxE,OAHAlB,GAAQ6B,OAAShB,UAAczE,WAAWE,KAC1C0D,EAAQyQ,QAAUzQ,EAAQyQ,YAC1BzQ,EAAQyQ,QAAQ,gBAAkB,mBAC3BrW,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7By+IxC7B,IAAK,qBACLnC,MAAO,S6Bv+IUgE,GACjBA,EAAUA,KACV,IAAIc,4FAA0Bd,GAC1BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa2mB,UAA2BznB,EAAxC,aAA2DG,EAA3D,IAAoEC,CAIxE,OAHAlB,GAAQ6B,OAAShB,UAAczE,WAAWG,IAC1CyD,EAAQyQ,QAAUzQ,EAAQyQ,YAC1BzQ,EAAQyQ,QAAQ,gBAAkB,8BAC3BrW,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7B0+IxC7B,IAAK,uBACLnC,MAAO,S6Bx+IYgE,GACnBA,EAAUA,KACV,IAAIQ,8FAA8BR,GAC9BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa0mB,YAA6B9nB,EAA1C,aAA+DS,EAA/D,IAAwEC,CAI5E,OAHAlB,GAAQ6B,OAAShB,UAAczE,WAAWG,IAC1CyD,EAAQyQ,QAAUzQ,EAAQyQ,YAC1BzQ,EAAQyQ,QAAQ,gBAAkB,8BAC3BrW,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7B2+IxC7B,IAAK,uBACLnC,MAAO,S6Bz+IYgE,GACnBA,EAAUA,KACV,IAAIQ,8FAA8BR,GAC9BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa0mB,YAA6B9nB,EAA1C,aAA+DS,EAA/D,IAAwEC,CAE5E,OADAlB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M7B4+IxC7B,IAAK,qBACLnC,MAAO,S6B1+IUgE,GACjBA,EAAUA,KACV,IAAIc,4FAA0Bd,GAC1BiB,0FAAwBjB,GACxBkB,gGAAoClB,GAEpC4B,EAAa2mB,UAA2BznB,EAAxC,aAA2DG,EAA3D,IAAoEC,CAExE,OADAlB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,O7B8+InC4V,G6BnnJ6BjW,U7BsnJtC7F,GAAQmC,Q6BtnJa2Z,E7BunJrB7b,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAiBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GApBjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,M8B/oJhiBid,EAAApgB,EAAA,G9BmpJIqgB,EAAYtd,EAAuBqd,G8BlpJvCrc,EAAA/D,EAAA,G9BspJIgE,EAAiBjB,EAAuBgB,G8BnpJtCc,KAEeyW,E9B8pJR,SAAU2F,G8B7pJrB,QAAA3F,GAAYjW,GAAQ,MAAApC,GAAApD,KAAAyb,GAAAkD,EAAA3e,MAAAyb,EAAAyD,WAAAne,OAAAue,eAAA7D,IAAAjb,KAAAR,KACZwF,EAAQR,I9B0sJhB,MA7CA6Z,GAAUpD,EAAQ2F,GAQlB5d,EAAaiY,IACX1X,IAAK,4BACLnC,MAAO,S8BpqJiBgE,GACxB,GAAuB,gBAAZA,GAAsB,CAE/BA,GAAYwoB,MADAxoB,GAGd,MAAOA,M9BuqJP7B,IAAK,YACLnC,MAAO,S8BrqJCgE,GACR,GACIwoB,GAAQ,EACZ,KAAIxoB,EAAQwoB,QAASxoB,EAAQqX,OAAOmR,MAMlC,KAAM,IAAIloB,OAAJ,mHAER,OAPEN,GAAQqX,OAASrX,EAAQqX,WACzBmR,EAAQxoB,EAAQwoB,OAASxoB,EAAQqX,OAAOmR,MACpCxoB,EAAQwoB,aAAgBxoB,GAAQwoB,MACpCxoB,EAAQqX,OAAOmR,MAAQA,EAIlBxoB,K9B0qJP7B,IAAK,SACLnC,MAAO,S8BxqJFgE,GACLA,EAAU5F,KAAKquB,0BAA0BzoB,OACzCA,EAAU5F,KAAKsuB,UAAU1oB,EAGzB,OADAA,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAnCL,UAmC0B9B,O9B4qJnC6V,G8B5sJ2BlW,U9B+sJpC7F,GAAQmC,Q8B/sJa4Z,E9BgtJrB9b,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YA+BA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAlCjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MAE5hB2c,EAAO,QAAS9e,GAAIG,EAAQC,EAAU2e,GAA2B,OAAX5e,IAAiBA,EAAS6e,SAAS3e,UAAW,IAAI4e,GAAOrf,OAAOsf,yBAAyB/e,EAAQC,EAAW,QAAaic,KAAT4C,EAAoB,CAAE,GAAIE,GAASvf,OAAOue,eAAehe,EAAS,OAAe,QAAXgf,MAAmB,GAAkCnf,EAAImf,EAAQ/e,EAAU2e,GAAoB,GAAI,SAAWE,GAAQ,MAAOA,GAAKxe,KAAgB,IAAIf,GAASuf,EAAKjf,GAAK,QAAeqc,KAAX3c,EAA4C,MAAOA,GAAOL,KAAK0f,I+BruJ5dhc,EAAA/D,EAAA,G/ByuJIgE,EAAiBjB,EAAuBgB,G+BxuJ5CU,EAAAzE,EAAA,G/B4uJI0E,EAAyB3B,EAAuB0B,G+B3uJpDE,EAAA3E,EAAA,G/B+uJI4E,EAAsB7B,EAAuB4B,G+B9uJjDJ,EAAAvE,EAAA,G/BkvJIwE,EAAwBzB,EAAuBwB,G+BjvJnD6b,EAAApgB,EAAA,G/BqvJIqgB,EAAYtd,EAAuBqd,G+BjvJjCvb,GACJupB,KAAM,OACNC,UAAW,YACXC,QAAS,UACTC,UAAW,YACXC,aAAc,eACdC,gBAAiB,kBACjBC,iBAAkB,mBAClBxD,KAAM,OACNC,UAAW,YACXC,QAAS,UACTuD,OAAQ,SACRtC,QAAS,UACTuC,OAAQ,UAGWrT,E/B6vJT,SAAU0F,G+B5vJpB,QAAA1F,GAAYlW,GAAQpC,EAAApD,KAAA0b,EAAA,IAAAzG,GAAA0J,EAAA3e,MAAA0b,EAAAwD,WAAAne,OAAAue,eAAA5D,IAAAlb,KAAAR,KACZgF,GADY,OAElBiQ,GAAKzP,OAASA,EAFIyP,E/B67JpB,MAhMA4J,GAAUnD,EAAO0F,GAWjB5d,EAAakY,IACX3X,IAAK,aACLnC,MAAO,S+BrwJEgE,GACT,GAAIO,wFAAkBP,EAQtB,OAPIA,GAAQopB,QAAUppB,EAAQqpB,SAC5B9oB,EAAKP,EAAQopB,QAAUppB,EAAQqpB,QAC9BrpB,EAAQopB,aAAiBppB,GAAQopB,aAAgBppB,GAAQqpB,SACjDrpB,EAAQspB,MAAQtpB,EAAQspB,KAAK/oB,KACtCA,EAAKP,EAAQspB,KAAK/oB,IAEpB8Z,EAAAvE,EAAAla,UAAA0d,WAAAne,OAAAue,eAAA5D,EAAAla,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,GACjBA,K/BwwJPpC,IAAK,uBACLnC,MAAO,S+BtwJYgE,GACnB,GAAIO,wFAAkBP,EActB,OAZIA,GAAQupB,iBACVvpB,EAAQwpB,gBAAkBxpB,EAAQupB,qBAC3BvpB,GAAQupB,gBAGbvpB,EAAQypB,kBAAoBzpB,EAAQ0pB,oBACtCnpB,EAAKP,EAAQopB,QAAUppB,EAAQqpB,QAC9BrpB,EAAQopB,aAAiBppB,GAAQopB,aAAgBppB,GAAQqpB,SACjDrpB,EAAQwpB,iBAAmBxpB,EAAQwpB,gBAAgBjpB,KAC5DA,EAAKP,EAAQwpB,gBAAgBjpB,IAE/B8Z,EAAAvE,EAAAla,UAAA0d,WAAAne,OAAAue,eAAA5D,EAAAla,WAAA,oBAAAxB,MAAAQ,KAAAR,KAAwBmG,GACjBA,K/BywJPpC,IAAK,WACLnC,MAAO,S+BvwJAgE,EAASH,EAAQI,EAAgBC,GACxCD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EACrCF,EAAQspB,MACLrpB,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQspB,KAAMzpB,GACrDK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQspB,KAAMlvB,KAAK2F,kBACjEC,EAAQG,MAAO,EAAAhB,EAAAlD,SAAkB+D,EAAQspB,KAAMlvB,KAAK0F,WAAYI,SACzDF,GAAQspB,MAEfjP,EAAAvE,EAAAla,UAAA0d,WAAAne,OAAAue,eAAA5D,EAAAla,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,M/B+wJnD/B,IAAK,qBACLnC,MAAO,S+B5wJUgE,EAASH,EAAQI,EAAgBC,GAClDD,EAAiBA,GAAkB7F,KAAKwF,OAAOK,iBAAkB,EACjEC,EAAoBA,IAAqB,EAErCF,EAAQupB,iBACVvpB,EAAQwpB,gBAAkBxpB,EAAQupB,qBAC3BvpB,GAAQupB,gBAGbvpB,EAAQwpB,iBACLvpB,IAAkB,EAAAhB,EAAAhD,SAAqB+D,EAAQwpB,gBAAiB3pB,GAChEK,IAAqB,EAAAnB,EAAA9C,SAAoB+D,EAAQwpB,gBAAiBpvB,KAAK2F,kBAC5EC,EAAQG,MAAO,EAAAhB,EAAAlD,SAAkB+D,EAAQwpB,gBAAiBpvB,KAAK0F,WAAYI,SACpEF,GAAQwpB,iBAEfnP,EAAAvE,EAAAla,UAAA0d,WAAAne,OAAAue,eAAA5D,EAAAla,WAAA,YAAAxB,MAAAQ,KAAAR,KAAgB4F,EAASH,EAAQI,EAAgBC,M/BoxJnD/B,IAAK,MACLnC,MAAO,S+BjxJLgE,GACFA,EAAUqa,EAAAvE,EAAAla,UAAA0d,WAAAne,OAAAue,eAAA5D,EAAAla,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIopB,GAAShvB,KAAKuvB,WAAW3pB,GACzB4B,EAAaL,UAAa6nB,CAE9B,OADAppB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M/BoxJxC7B,IAAK,SACLnC,MAAO,S+BlxJFgE,GAEL,GADAA,EAAUA,OACL5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmBrc,EAAaqmB,KAAMrmB,EAAaumB,QAASvmB,EAAasmB,WAC3EzlB,mGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKwvB,SAAS5pB,EAASyb,EAAiBxb,EAAgBC,GAI1D,MADAF,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YAzGL,SAyG0B9B,M/BqxJxC7B,IAAK,SACLnC,MAAO,S+BnxJFgE,GACLA,EAAUA,KACV,IAAIopB,GAAShvB,KAAKuvB,WAAW3pB,EAC7B,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAKwvB,SAAS5pB,KAAaC,EAAgBC,GAE7C,GAAI0B,GAAaL,UAAa6nB,CAE9B,OADAppB,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M/BsxJxC7B,IAAK,SACLnC,MAAO,S+BpxJFgE,GACLA,EAAUA,KACV,IAAIopB,GAAShvB,KAAKuvB,WAAW3pB,GACzB4B,EAAaL,UAAa6nB,CAE9B,OADAppB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M/BuxJxC7B,IAAK,oBACLnC,MAAO,S+BrxJSgE,GAChBA,EAAUqa,EAAAvE,EAAAla,UAAA0d,WAAAne,OAAAue,eAAA5D,EAAAla,WAAA,mBAAAxB,MAAAQ,KAAAR,KAAuB4F,MACjC,IAAIypB,GAAmBrvB,KAAKyvB,qBAAqB7pB,GAC7C4B,EAAakoB,qBAA6BL,CAE9C,OADAzpB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M/BwxJxC7B,IAAK,qBACLnC,MAAO,S+BtxJUgE,GACjBA,EAAUA,KACV,IAAIopB,GAAShvB,KAAKuvB,WAAW3pB,GACzB4B,EAAaL,UAAa6nB,EAA1B,cAEJ,OADAppB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M/ByxJxC7B,IAAK,uBACLnC,MAAO,S+BvxJYgE,GAEnB,GADAA,EAAUA,OACL5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAMga,IAAmBrc,EAAaupB,KAAMvpB,EAAawpB,UAAWxpB,EAAaypB,QAASzpB,EAAa0pB,WACnG7oB,mGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK2vB,mBAAmB/pB,EAASyb,EAAiBxb,EAAgBC,GAIpE,MADAF,GAAQ6B,OAAShB,UAAczE,WAAWE,KACnClC,KAAKwF,OAAOkC,YA5JW,oBA4JU9B,M/B0xJxC7B,IAAK,uBACLnC,MAAO,S+BxxJYgE,GACnBA,EAAUA,KACV,IAAIypB,GAAmBrvB,KAAKyvB,qBAAqB7pB,EACjD,KAAK5F,KAAKwF,OAAO6B,YAAa,CAC5B,GAAIxB,oGAA0CD,GAC1CE,sGAAgDF,EAEpD5F,MAAK2vB,mBAAmB/pB,KAAaC,EAAgBC,GAEvD,GAAI0B,GAAakoB,qBAA6BL,CAE9C,OADAzpB,GAAQ6B,OAAShB,UAAczE,WAAWG,IACnCnC,KAAKwF,OAAOkC,YAAYF,EAAS5B,M/B2xJxC7B,IAAK,uBACLnC,MAAO,S+BzxJYgE,GACnBA,EAAUA,KACV,IAAIypB,GAAmBrvB,KAAKyvB,qBAAqB7pB,GAC7C4B,EAAakoB,qBAA6BL,CAE9C,OADAzpB,GAAQ6B,OAAShB,UAAczE,WAAWI,OACnCpC,KAAKwF,OAAOkC,YAAYF,EAAS5B,O/B6xJnC8V,G+B97J0BnW,U/Bi8JnC7F,GAAQmC,Q+Bj8Ja6Z,E/Bk8JrB/b,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAyBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GA5Bjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAI4B,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MgCv+JhiBY,EAAA/D,EAAA,GhC2+JIgE,EAAiBjB,EAAuBgB,GgC1+J5CU,EAAAzE,EAAA,GACAuE,GhC6+J6BxB,EAAuB0B,GgC7+JpDzE,EAAA,IACAogB,GhCg/J4Brd,EAAuBwB,GgCh/JnDvE,EAAA,IhCo/JIqgB,EAAYtd,EAAuBqd,GgCj/JjCvb,KAEe2W,EhC4/JT,SAAUyF,GgC3/JpB,QAAAzF,GAAYnW,GAAQ,MAAApC,GAAApD,KAAA2b,GAAAgD,EAAA3e,MAAA2b,EAAAuD,WAAAne,OAAAue,eAAA3D,IAAAnb,KAAAR,KACZwF,EAAQR,IhCqhKhB,MA1BA6Z,GAAUlD,EAAOyF,GAQjB5d,EAAamY,IACX5X,IAAK,iBACLnC,MAAO,SgClgKMgE,GACbA,EAAUA,KAGV,OADAA,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAFFP,YAEuBvB,MhCqgKxC7B,IAAK,sBACLnC,MAAO,SgCngKWgE,GAClBA,EAAUA,KACV,IAAI4B,GAAaL,UAAayoB,OAA1B,cAEJ,OADAhqB,GAAQ6B,OAAShB,UAAczE,WAAWC,IACnCjC,KAAKwF,OAAOkC,YAAYF,EAAS5B,OhCugKnC+V,GgCvhK0BpW,UhC0hKnC7F,GAAQmC,QgC1hKa8Z,EhC2hKrBhc,EAAOD,QAAUA,EAAiB,SAI5B,SAAUC,EAAQD,EAASS,GAEjC,YAmBA,SAAS+C,GAAuBC,GAAO,MAAOA,IAAOA,EAAI9B,WAAa8B,GAAQtB,QAASsB,GAEvF,QAASC,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASob,GAA2B5e,EAAMS,GAAQ,IAAKT,EAAQ,KAAM,IAAI6e,gBAAe,4DAAgE,QAAOpe,GAAyB,gBAATA,IAAqC,kBAATA,GAA8BT,EAAPS,EAElO,QAASqe,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAIxb,WAAU,iEAAoEwb,GAAeD,GAAStd,UAAYT,OAAOie,OAAOD,GAAcA,EAAWvd,WAAasH,aAAelH,MAAOkd,EAAU5d,YAAY,EAAO4C,UAAU,EAAM7C,cAAc,KAAe8d,IAAYhe,OAAOke,eAAiBle,OAAOke,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAtBjehe,OAAOC,eAAetB,EAAS,cAC7BkC,OAAO,GAGT,IAAIyG,GAA4B,kBAAXO,SAAoD,gBAApBA,QAAOC,SAAwB,SAAU1F,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXyF,SAAyBzF,EAAI2F,cAAgBF,QAAUzF,IAAQyF,OAAOpH,UAAY,eAAkB2B,IAElQK,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIrD,GAAI,EAAGA,EAAIqD,EAAMC,OAAQtD,IAAK,CAAE,GAAIuD,GAAaF,EAAMrD,EAAIuD,GAAW3C,WAAa2C,EAAW3C,aAAc,EAAO2C,EAAW5C,cAAe,EAAU,SAAW4C,KAAYA,EAAWC,UAAW,GAAM/C,OAAOC,eAAe0C,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUP,EAAaU,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBH,EAAY9B,UAAWwC,GAAiBC,GAAaR,EAAiBH,EAAaW,GAAqBX,MiCljKhiB6b,EAAAhf,EAAA,GjCsjKIif,EAAkBlc,EAAuBic,GiCrjK7Cjb,EAAA/D,EAAA,GjCyjKIgE,EAAiBjB,EAAuBgB,GiCvjKvBwa,EjCikKK,SAAUW,GiChkKlC,QAAAX,GAAY1D,GAAQ5X,EAAApD,KAAA0e,GAClB1D,EAASA,KADS,IAAA/F,GAAA0J,EAAA3e,MAAA0e,EAAAQ,WAAAne,OAAAue,eAAAZ,IAAAle,KAAAR,KAEZgb,GAFY,OAGlB/F,GAAK4a,qBAAuB7U,EAAO8U,qBAAuB,KAC1D7a,EAAK8a,mBAAqB9a,EAAK+a,kCAAkChV,GACjE/F,EAAKgb,iBAAmBhb,EAAKib,2BAC7Bjb,EAAKkb,QAAUnV,EAAOmV,SAAW,eACjClb,EAAKmb,eAAiBpV,EAAOoV,iBAAkB,EAC/Cnb,EAAKob,WAAarV,EAAOqV,aAAc,EACvCpb,EAAKqb,UAAYtV,EAAOsV,YAAa,EACrCrb,EAAKsb,kBAAoBvV,EAAOwV,YAAc,EAC9Cvb,EAAKwb,gBAAkBxb,EAAKyb,kBAAkBzb,EAAKkb,SACnDlb,EAAK0b,mBAAqB3V,EAAO2V,qBAAsB,EAZrC1b,EjC6wKpB,MA5MA4J,GAAUH,EAAqBW,GAsB/B7b,EAAakb,IACX3a,IAAK,oCACLnC,MAAO,SiC1kKyBoZ,GAChC,GAAsB,gBAAlB,KAAOA,EAAP,YAAA3S,EAAO2S,MAAwBA,EAAO+U,oBAAsB/U,EAAO4V,sBAErE,MADA5V,GAAO6V,kBAAoB7V,EAAO+U,oBAAsB/U,EAAO4V,qBACxD5V,EAAO6V,iBAEd,MAAM,IAAI3qB,OAAM,uJjC8kKlBnC,IAAK,oBACLnC,MAAO,SiC3kKSwR,GAChB,IACE,GAAI+c,GAAUjd,OAAOE,GACnB0d,EAAI,kBAGN,OAFAX,GAAQY,QAAQD,EAAGA,GACnBX,EAAQa,WAAWF,IACZ,EAET,MAAOniB,GACL,OAAO,MjC8kKT5K,IAAK,2BACLnC,MAAO,SiC3kKgBivB,GACvB,GAAII,KACJ,OAAiC,gBAAtBJ,IACTI,EAA0BvU,YAAcmU,EACnC7wB,KAAK2wB,qBACRM,EAA0B5L,UAAYrlB,KAAKkxB,6BAEtCD,IAEwB,gBAA7B,KAAOJ,EAAP,YAAAxoB,EAAOwoB,MAAmCA,EAAkBnU,aAAemU,EAAkBlU,gBAC/FsU,EAA0BvU,YAAcmU,EAAkBnU,aAAemU,EAAkBlU,cAE5D,gBAA7B,KAAOkU,EAAP,YAAAxoB,EAAOwoB,KAAmC7wB,KAAK2wB,qBAAuBE,EAAkBxL,YAAawL,EAAkBM,aACzHF,EAA0B5L,UAAYwL,EAAkBxL,WAAawL,EAAkBM,YAEpFnxB,KAAK2wB,oBAAuBM,EAA0B5L,YACzD4L,EAA0B5L,UAAYrlB,KAAKkxB,6BAEtCD,MjC8kKPltB,IAAK,4BACLnC,MAAO,WiC3kKP,MAAOwvB,MAAKC,MAAQrxB,KAAK6vB,wBjC+kKzB9rB,IAAK,+BACLnC,MAAO,SiC7kKoBmuB,GAC3B,GAAkC,kBAAvBA,IAAqC/vB,KAAKqwB,WACnD,MAAO,IAAIrwB,MAAKqX,QAAQ,SAACC,EAASC,GAChCwY,EAAmB,SAACvgB,EAAK+M,GACnB/M,GAAO+H,EAAO/H,GACd+M,EACFjF,EAAQiF,GAERhF,EAAO,qCAIR,IAAkC,kBAAvBwY,IAAqC/vB,KAAKswB,UAAW,CACrE,GAAIgB,GAA+BvB,GACnC,IAA4C,gBAAxC,KAAOuB,EAAP,YAAAjpB,EAAOipB,KAA6C,QAAUA,GAChE,MAAOA,EAEP,MAAM,IAAIprB,OAAM,4DAGlB,KAAM,IAAIA,OAAM,+DjCmlKlBnC,IAAK,2BACLnC,MAAO,WiChlKkB,GAAAwhB,GAAApjB,IAsBzB,OArBAA,MAAKkc,aAAe,WAClB,MAAIkH,GAAKqN,kBAAoBrN,EAAKgN,eACzB,GAAIhN,GAAK/L,QAAQ,SAACC,EAASC,GAChC,MAAO6L,GAAKmO,6BAA6BnO,EAAK2M,oBAC3C/Y,KAAK,SAACuF,GACLA,EAAQ6G,EAAKoO,yBAAyBjV,GACtCrJ,OAAOkQ,EAAK+M,SAASY,QAAQtqB,UAAcxD,sBAAuB8P,KAAKC,UAAUuJ,IACjFjF,EAAQiF,OAIP,GAAI6G,GAAK/L,QAAQ,SAACC,EAASC,GAChC,MAAO6L,GAAKmO,6BAA6BnO,EAAK2M,oBAC3C/Y,KAAK,SAACuF,GACLA,EAAQ6G,EAAKoO,yBAAyBjV,GACtCjF,EAAQiF,SAOhBG,YAAa1c,KAAKkc,iBjColKpBnY,IAAK,aACLnC,MAAO,SiCjlKE2a,GAET,OADgBA,EAAM4U,YAAc5U,EAAM8I,WACtB+L,KAAKC,SjColKzBttB,IAAK,gBACLnC,MAAO,SiCllKK6vB,GACZ,GAAIzxB,KAAKywB,kBAAoBzwB,KAAKowB,eAAgB,CAChD,GAAIsB,GAAWxe,OAAOlT,KAAKmwB,SAASwB,QAAQlrB,UAAcxD,sBAE1D,OADAyuB,GAAYA,EAAY3e,KAAK2D,MAAMgb,GAAY,KAC3CA,IAAa1xB,KAAK4xB,WAAWF,IAAmC,IAAtBD,EACrC,GAAIzxB,MAAKqX,QAAQ,SAACC,EAASC,GAAaD,EAAQoa,MAEvDxe,OAAOlT,KAAKmwB,SAASa,WAAWvqB,UAAcxD,uBACvCjD,KAAKiwB,iBAAiBvT,eAG/B,MAAO1c,MAAKiwB,iBAAiBvT,iBjCwlK/B3Y,IAAK,SACLnC,MAAO,SiCrlKF2d,EAAM3Z,EAAS6rB,GAAmB,GAAA7N,GAAA5jB,IACvC,OAAOA,MAAK6xB,cAAcJ,GACvBza,KAAK,SAACuF,GACL,GAAIlG,GAAUzQ,EAAQyQ,WACtBA,GAAQ5P,UAAc3E,sBAAtB,UAAwDya,EAAMG,YAC9D9W,EAAUA,KACV,IAAIksB,GAAkB/wB,OAAO+b,UAAWlX,EAMxC,OALAksB,GAAgBrZ,IAAM7S,EAAQ6S,KAAR,GAAkBmL,EAAKhI,YAAc2D,EAC3DuS,EAAgBzb,QAAUA,EAC1Byb,EAAgB7U,OAAS2G,EAAKnE,aAAa7Z,GAC3Cge,EAAKlE,sBAAsBoS,GAC3BA,EAAkBlO,EAAKjE,eAAemS,QjC2lK1C/tB,IAAK,cACLnC,MAAO,SiCtlKG2d,EAAM3Z,EAAS6rB,GAAmB,GAAAM,GAAA/xB,IAE5C,KADAyxB,EAAoBA,GAAqB,GACjBzxB,KAAKuwB,kBAC3B,KAAM,IAAIrqB,OAAM,wBAElB,OAAOlG,MAAKgyB,OAAOzS,EAAM3Z,EAAS6rB,GAC/Bza,KAAK,SAAC8a,GACL,MAAIC,GAAKjW,qBAAuBlW,EAAQga,oBAClCkS,EAAgBxZ,SAClBwZ,EAAgBzb,QAAQ,oBAAkBmH,SACnCsU,GAAgBxZ,QAElBwZ,GACEC,EAAKzV,YAAYuD,UAAYja,EAAQ0S,OACvCyZ,EAAKjS,yBAAyBiS,EAAKzV,YAAawV,GAEhDC,EAAKzV,YAAYwV,GACrB/a,MAAM,SAACvH,GACN,GAAImH,GAASnH,EAAImH,QAAUnH,EAAIiH,SAASE,MACxC,QAAe6G,KAAX7G,GAAwBA,GAAU,EAIpC,MAHIob,GAAKtB,kBAAoBsB,EAAK3B,gBAChCld,OAAO6e,EAAK5B,SAASa,WAAWvqB,UAAcxD,uBAEzC8uB,EAAKrqB,YAAY6X,EAAM3Z,EAAS6rB,EAAoB,EAE3D,MAAMjiB,WjC8lKbkP,GiC9wKwC3D,UjCixKjDrb,GAAQmC,QiCjxKa6c,EjCkxKrB/e,EAAOD,QAAUA,EAAiB","file":"BoxSdk.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"fetch\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"BoxSdk\", [\"fetch\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"BoxSdk\"] = factory(require(\"fetch\"));\n\telse\n\t\troot[\"BoxSdk\"] = factory(root[\"fetch\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_12__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"fetch\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"BoxSdk\", [\"fetch\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"BoxSdk\"] = factory(require(\"fetch\"));\n\telse\n\t\troot[\"BoxSdk\"] = factory(root[\"fetch\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_12__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 11);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  HEADER_AUTHORIZATION: 'Authorization',\n  HEADER_AUTHORIZATION_PREFIX: 'Bearer ',\n  HTTP_VERBS: {\n    GET: 'GET',\n    POST: 'POST',\n    PUT: 'PUT',\n    DELETE: 'DELETE',\n    OPTIONS: 'OPTIONS'\n  },\n  MODES: {\n    SKIP_VALIDATION: 'skipValidation',\n    IGNORE_MODEL_VALUES: 'ignoreModelValues'\n  },\n  FOLDER: 'folder',\n  FOLDER_ID: 'folderId',\n  FILE: 'file',\n  FILE_ID: 'fileId',\n  VERSION: 'version',\n  VERSION_ID: 'versionId',\n  COMMENT: 'comment',\n  COMMENT_ID: 'commentId',\n  BOX_TOKEN_STORAGE_KEY: 'box_token'\n};\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _investigateModes = __webpack_require__(15);\n\nvar _investigateModes2 = _interopRequireDefault(_investigateModes);\n\nvar _mapValues = __webpack_require__(8);\n\nvar _mapValues2 = _interopRequireDefault(_mapValues);\n\nvar _flattenDottedPropertyNames = __webpack_require__(16);\n\nvar _flattenDottedPropertyNames2 = _interopRequireDefault(_flattenDottedPropertyNames);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _createRequestBody = __webpack_require__(4);\n\nvar _createRequestBody2 = _interopRequireDefault(_createRequestBody);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MODEL_VALUES = {\n  SHARED_LINK: 'shared_link',\n  SHARED_LINK_ACCESS: 'shared_link.access',\n  UNSHARED_AT: 'shared_link.unshared_at',\n  PERMISSIONS: 'shared_link.permissions',\n  CAN_DOWNLOAD: 'shared_link.permissions.can_download',\n  CAN_PREVIEW: 'shared_link.permissions.can_preview'\n};\n\nvar Manager = function () {\n  function Manager(client, values) {\n    _classCallCheck(this, Manager);\n\n    this.client = client;\n    this.ALL_VALUES = values ? (0, _mapValues2.default)(values) : null;\n    this.FLATTENED_VALUES = this.ALL_VALUES ? (0, _flattenDottedPropertyNames2.default)(this.ALL_VALUES) : null;\n  }\n\n  _createClass(Manager, [{\n    key: '_getModel',\n    value: function _getModel(options, values, skipValidation, ignoreModelValues) {\n      if (options.body) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.body, values);\n        };\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.body, this.FLATTENED_VALUES);\n        }\n      } else if (options) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options, values);\n        };\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options, this.FLATTENED_VALUES);\n        }\n        options.body = (0, _createRequestBody2.default)(options, this.ALL_VALUES, ignoreModelValues);\n      } else {\n        values = values || this.ALL_VALUES;\n        var requiredValuesString = values.join(', ');\n        throw new Error('Please select from the following fields when making this API call: ' + requiredValuesString);\n      }\n    }\n  }, {\n    key: '_objectifyString',\n    value: function _objectifyString(options) {\n      if (typeof options === 'string') {\n        var id = options;\n        options = { id: id };\n      }\n      return options;\n    }\n  }, {\n    key: '_getId',\n    value: function _getId(options) {\n      var id = '';\n      if (options.id) {\n        id = options.id;\n        delete options.id;\n      } else if (typeof options === 'string') {\n        id = options;\n        options = {};\n      }\n      return id;\n    }\n  }, {\n    key: '_getFolderId',\n    value: function _getFolderId(options) {\n      var folderId = this._getId(options);\n      if (options.folderId || options.folder_id) {\n        folderId = options.folderId || options.folder_id;\n        options.folderId ? delete options.folderId : delete options.folder_id;\n      } else if (options.folder && options.folder.id) {\n        folderId = options.folder.id;\n      }\n      this._testForMissingId(folderId, _boxConstants2.default.FOLDER, _boxConstants2.default.FOLDER_ID);\n      return folderId;\n    }\n  }, {\n    key: '_getFileId',\n    value: function _getFileId(options) {\n      var fileId = this._getId(options);\n      if (options.fileId || options.file_id) {\n        fileId = options.fileId || options.file_id;\n        options.fileId ? delete options.fileId : delete options.file_id;\n      } else if (options.file && options.file.id) {\n        fileId = options.file.id;\n      }\n      this._testForMissingId(fileId, _boxConstants2.default.FILE, _boxConstants2.default.FILE_ID);\n      return fileId;\n    }\n  }, {\n    key: '_getScope',\n    value: function _getScope(options) {\n      var scope = 'enterprise';\n      if (options.scope && options.scope !== '') {\n        scope = options.scope;\n        delete options.scope;\n      }\n      return scope;\n    }\n  }, {\n    key: '_getTemplateKey',\n    value: function _getTemplateKey(options) {\n      var templateKey = '';\n      if (options.template && options.template !== '') {\n        templateKey = options.template.key !== '' ? options.template.key : options.template;\n        delete options.template;\n      } else if (options.templateKey || options.template_key) {\n        templateKey = options.templateKey || options.template_key;\n        options.templateKey ? delete options.templateKey : delete options.template_key;\n      }\n      return templateKey;\n    }\n  }, {\n    key: '_testForMissingId',\n    value: function _testForMissingId(id, idType, correctlyFormattedIdProp) {\n      idType = idType || 'unknown';\n      correctlyFormattedIdProp = correctlyFormattedIdProp || 'unknown';\n      if (id === '') {\n        throw new Error('A(n) ' + idType + ' field is required for this API call. Please provide an object with a key formatted in this style: ' + correctlyFormattedIdProp);\n      }\n    }\n  }, {\n    key: '_setSkipValidation',\n    value: function _setSkipValidation(options) {\n      return (0, _investigateModes2.default)(options, _boxConstants2.default.MODES.SKIP_VALIDATION) || false;\n    }\n  }, {\n    key: '_setIgnoreModelValues',\n    value: function _setIgnoreModelValues(options) {\n      return (0, _investigateModes2.default)(options, _boxConstants2.default.MODES.IGNORE_MODEL_VALUES) || false;\n    }\n  }, {\n    key: '_createSharedLink',\n    value: function _createSharedLink(options, id, BASE_PATH, FLATTENED_VALUES) {\n      options = options || {};\n      options.body = options.body || {};\n      options.body.shared_link = options.body.shared_link || {};\n\n      if (!this.client._simpleMode) {\n        var skipValidation = this._setSkipValidation(options);\n        var ignoreModelValues = this._setIgnoreModelValues(options);\n\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options, FLATTENED_VALUES);\n        }\n        if (!skipValidation) {\n          if (options[MODEL_VALUES.SHARED_LINK]) {\n            options.body[MODEL_VALUES.SHARED_LINK] = options[MODEL_VALUES.SHARED_LINK];\n            delete options[MODEL_VALUES.SHARED_LINK];\n          }\n        }\n      }\n      var apiPath = BASE_PATH + '/' + id;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Manager;\n}();\n\nexports.default = Manager;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (item, values) {\n  values = values || [];\n  if (values.length === 0) {\n    return;\n  }\n  var temp = item;\n  values.map(function (requiredValue) {\n    if (requiredValue.indexOf('.') !== -1) {\n      var requiredValues = requiredValue.split('.');\n      for (var i = 0, l = requiredValues.length; i < l; i++) {\n        var prop = requiredValues[i];\n        if (temp.hasOwnProperty(prop)) {\n          temp = temp[prop];\n        }\n      }\n      if (!temp) {\n        throw new Error('A(n) ' + requiredValue + ' field is required for this API call');\n      };\n    } else if (!item[requiredValue]) {\n      throw new Error('A(n) ' + requiredValue + ' field is required for this API call');\n    }\n  });\n};\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = NormalizeObjectKeys;\nfunction NormalizeObjectKeys(options, values) {\n  values = values || [];\n\n  Object.keys(options).map(function (key) {\n    if (values.indexOf(key) !== -1) {\n      return;\n    }\n    if (_typeof(options[key]) === 'object') {\n      NormalizeObjectKeys(options[key], values);\n    }\n\n    var splitCamel = key.split(/(?=[A-Z])/g);\n\n    if (splitCamel.length > 1) {\n      var regroup = [];\n      for (var i = 1; i < splitCamel.length; i++) {\n        regroup.push(splitCamel[i].toLowerCase());\n      }\n      if (splitCamel.length > 0) {\n        regroup.unshift(splitCamel[0]);\n      }\n      var newKey = regroup.join('_');\n\n      if (values.indexOf(newKey) !== -1) {\n\n        options[newKey] = options[key];\n        delete options[key];\n      }\n    }\n  });\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (options, values, ignoreModelValues) {\n  ignoreModelValues = ignoreModelValues || false;\n  values = values || [];\n\n  if (ignoreModelValues) {\n    Object.keys(options).map(function (key) {\n      if (key !== 'body') {\n        options.body[key] = options[key];\n        delete options[key];\n      }\n    });\n    return options.body;\n  }\n\n  if (values.length === 0 && ignoreModelValues === false) {\n    return {};\n  }\n\n  options.body = options.body || {};\n  Object.keys(options).map(function (key) {\n    if (values.indexOf(key) !== -1) {\n      if (key !== 'body') {\n        options.body[key] = options[key];\n        delete options[key];\n      }\n    }\n  });\n  return options.body;\n};\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Rusha\"] = factory();\n\telse\n\t\troot[\"Rusha\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar RushaCore = __webpack_require__(5);\n\nvar _require = __webpack_require__(1),\n    toHex = _require.toHex,\n    ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = __webpack_require__(6);\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n  for (len += 9; len % 64 > 0; len += 1) {}\n  return len;\n};\n\nvar padZeroes = function (bin, len) {\n  var h8 = new Uint8Array(bin.buffer);\n  var om = len % 4,\n      align = len - om;\n  switch (om) {\n    case 0:\n      h8[align + 3] = 0;\n    case 1:\n      h8[align + 2] = 0;\n    case 2:\n      h8[align + 1] = 0;\n    case 3:\n      h8[align + 0] = 0;\n  }\n  for (var i = (len >> 2) + 1; i < bin.length; i++) {\n    bin[i] = 0;\n  }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n  bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n  // To support msgLen >= 2 GiB, use a float division when computing the\n  // high 32-bits of the big-endian message length in bits.\n  bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n  bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n  var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n  var out = new Int32Array(5);\n  var arr = new DataView(out.buffer);\n  arr.setInt32(0, io[0], false);\n  arr.setInt32(4, io[1], false);\n  arr.setInt32(8, io[2], false);\n  arr.setInt32(12, io[3], false);\n  arr.setInt32(16, io[4], false);\n  return out;\n};\n\nvar Rusha = function () {\n  function Rusha(chunkSize) {\n    _classCallCheck(this, Rusha);\n\n    chunkSize = chunkSize || 64 * 1024;\n    if (chunkSize % 64 > 0) {\n      throw new Error('Chunk size must be a multiple of 128 bit');\n    }\n    this._offset = 0;\n    this._maxChunkLen = chunkSize;\n    this._padMaxChunkLen = padlen(chunkSize);\n    // The size of the heap is the sum of:\n    // 1. The padded input message size\n    // 2. The extended space the algorithm needs (320 byte)\n    // 3. The 160 bit state the algoritm uses\n    this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n    this._h32 = new Int32Array(this._heap);\n    this._h8 = new Int8Array(this._heap);\n    this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n  }\n\n  Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n    this._offset = 0;\n    var io = new Int32Array(heap, padMsgLen + 320, 5);\n    io[0] = 1732584193;\n    io[1] = -271733879;\n    io[2] = -1732584194;\n    io[3] = 271733878;\n    io[4] = -1009589776;\n  };\n\n  Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n    var padChunkLen = padlen(chunkLen);\n    var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n    padZeroes(view, chunkLen);\n    padData(view, chunkLen, msgLen);\n    return padChunkLen;\n  };\n\n  Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n    conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n  };\n\n  Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n    var padChunkLen = chunkLen;\n    this._write(data, chunkOffset, chunkLen);\n    if (finalize) {\n      padChunkLen = this._padChunk(chunkLen, msgLen);\n    }\n    this._core.hash(padChunkLen, this._padMaxChunkLen);\n  };\n\n  Rusha.prototype.rawDigest = function rawDigest(str) {\n    var msgLen = str.byteLength || str.length || str.size || 0;\n    this._initState(this._heap, this._padMaxChunkLen);\n    var chunkOffset = 0,\n        chunkLen = this._maxChunkLen;\n    for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n      this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n    }\n    this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n    return getRawDigest(this._heap, this._padMaxChunkLen);\n  };\n\n  Rusha.prototype.digest = function digest(str) {\n    return toHex(this.rawDigest(str).buffer);\n  };\n\n  Rusha.prototype.digestFromString = function digestFromString(str) {\n    return this.digest(str);\n  };\n\n  Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n    return this.digest(str);\n  };\n\n  Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n    return this.digest(str);\n  };\n\n  Rusha.prototype.resetState = function resetState() {\n    this._initState(this._heap, this._padMaxChunkLen);\n    return this;\n  };\n\n  Rusha.prototype.append = function append(chunk) {\n    var chunkOffset = 0;\n    var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n    var turnOffset = this._offset % this._maxChunkLen;\n    var inputLen = void 0;\n\n    this._offset += chunkLen;\n    while (chunkOffset < chunkLen) {\n      inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n      this._write(chunk, chunkOffset, inputLen, turnOffset);\n      turnOffset += inputLen;\n      chunkOffset += inputLen;\n      if (turnOffset === this._maxChunkLen) {\n        this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n        turnOffset = 0;\n      }\n    }\n    return this;\n  };\n\n  Rusha.prototype.getState = function getState() {\n    var turnOffset = this._offset % this._maxChunkLen;\n    var heap = void 0;\n    if (!turnOffset) {\n      var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n      heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n    } else {\n      heap = this._heap.slice(0);\n    }\n    return {\n      offset: this._offset,\n      heap: heap\n    };\n  };\n\n  Rusha.prototype.setState = function setState(state) {\n    this._offset = state.offset;\n    if (state.heap.byteLength === 20) {\n      var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n      io.set(new Int32Array(state.heap));\n    } else {\n      this._h32.set(new Int32Array(state.heap));\n    }\n    return this;\n  };\n\n  Rusha.prototype.rawEnd = function rawEnd() {\n    var msgLen = this._offset;\n    var chunkLen = msgLen % this._maxChunkLen;\n    var padChunkLen = this._padChunk(chunkLen, msgLen);\n    this._core.hash(padChunkLen, this._padMaxChunkLen);\n    var result = getRawDigest(this._heap, this._padMaxChunkLen);\n    this._initState(this._heap, this._padMaxChunkLen);\n    return result;\n  };\n\n  Rusha.prototype.end = function end() {\n    return toHex(this.rawEnd().buffer);\n  };\n\n  return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n  precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n  var binarray = new Uint8Array(arrayBuffer);\n  var res = new Array(arrayBuffer.byteLength);\n  for (var _i = 0; _i < res.length; _i++) {\n    res[_i] = precomputedHex[binarray[_i]];\n  }\n  return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n  // The asm.js spec says:\n  // The heap object's byteLength must be either\n  // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n  // Also, byteLengths smaller than 2^16 are deprecated.\n  var p = 0;\n  // If v is smaller than 2^16, the smallest possible solution\n  // is 2^16.\n  if (v <= 65536) return 65536;\n  // If v < 2^24, we round up to 2^n,\n  // otherwise we round up to 2^24 * n.\n  if (v < 16777216) {\n    for (p = 1; p < v; p = p << 1) {}\n  } else {\n    for (p = 16777216; p < v; p += 16777216) {}\n  }\n  return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n  var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n  var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n  var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n  // Detects whether we run inside a dedicated worker or not.\n  //\n  // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n  // has a bug where it only supports `WorkerGlobalScope`.\n  //\n  // Therefore, we consider us as running inside a dedicated worker\n  // when we are running inside a worker, but not in a shared or service worker.\n  //\n  // When new types of workers are introduced, we will need to adjust this code.\n  return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n  var Rusha = __webpack_require__(0);\n\n  var hashData = function (hasher, data, cb) {\n    try {\n      return cb(null, hasher.digest(data));\n    } catch (e) {\n      return cb(e);\n    }\n  };\n\n  var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n    var reader = new self.FileReader();\n    reader.onloadend = function onloadend() {\n      if (reader.error) {\n        return cb(reader.error);\n      }\n      var buffer = reader.result;\n      readTotal += reader.result.byteLength;\n      try {\n        hasher.append(buffer);\n      } catch (e) {\n        cb(e);\n        return;\n      }\n      if (readTotal < file.size) {\n        hashFile(hasher, readTotal, blockSize, file, cb);\n      } else {\n        cb(null, hasher.end());\n      }\n    };\n    reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n  };\n\n  var workerBehaviourEnabled = true;\n\n  self.onmessage = function (event) {\n    if (!workerBehaviourEnabled) {\n      return;\n    }\n\n    var data = event.data.data,\n        file = event.data.file,\n        id = event.data.id;\n    if (typeof id === 'undefined') return;\n    if (!file && !data) return;\n    var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n    var hasher = new Rusha(blockSize);\n    hasher.resetState();\n    var done = function (err, hash) {\n      if (!err) {\n        self.postMessage({ id: id, hash: hash });\n      } else {\n        self.postMessage({ id: id, error: err.name });\n      }\n    };\n    if (data) hashData(hasher, data, done);\n    if (file) hashFile(hasher, 0, blockSize, file, done);\n  };\n\n  return function () {\n    workerBehaviourEnabled = false;\n  };\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, browser */\n\nvar work = __webpack_require__(4);\nvar Rusha = __webpack_require__(0);\nvar createHash = __webpack_require__(7);\nvar runWorker = __webpack_require__(2);\n\nvar _require = __webpack_require__(1),\n    isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n  var worker = work(/*require.resolve*/(2));\n  var terminate = worker.terminate;\n  worker.terminate = function () {\n    URL.revokeObjectURL(worker.objectURL);\n    terminate.call(worker);\n  };\n  return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction webpackBootstrapFunc (modules) {\n/******/  // The module cache\n/******/  var installedModules = {};\n\n/******/  // The require function\n/******/  function __webpack_require__(moduleId) {\n\n/******/    // Check if module is in cache\n/******/    if(installedModules[moduleId])\n/******/      return installedModules[moduleId].exports;\n\n/******/    // Create a new module (and put it into the cache)\n/******/    var module = installedModules[moduleId] = {\n/******/      i: moduleId,\n/******/      l: false,\n/******/      exports: {}\n/******/    };\n\n/******/    // Execute the module function\n/******/    modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/    // Flag the module as loaded\n/******/    module.l = true;\n\n/******/    // Return the exports of the module\n/******/    return module.exports;\n/******/  }\n\n/******/  // expose the modules object (__webpack_modules__)\n/******/  __webpack_require__.m = modules;\n\n/******/  // expose the module cache\n/******/  __webpack_require__.c = installedModules;\n\n/******/  // identity function for calling harmony imports with the correct context\n/******/  __webpack_require__.i = function(value) { return value; };\n\n/******/  // define getter function for harmony exports\n/******/  __webpack_require__.d = function(exports, name, getter) {\n/******/    if(!__webpack_require__.o(exports, name)) {\n/******/      Object.defineProperty(exports, name, {\n/******/        configurable: false,\n/******/        enumerable: true,\n/******/        get: getter\n/******/      });\n/******/    }\n/******/  };\n\n/******/  // define __esModule on exports\n/******/  __webpack_require__.r = function(exports) {\n/******/    Object.defineProperty(exports, '__esModule', { value: true });\n/******/  };\n\n/******/  // getDefaultExport function for compatibility with non-harmony modules\n/******/  __webpack_require__.n = function(module) {\n/******/    var getter = module && module.__esModule ?\n/******/      function getDefault() { return module['default']; } :\n/******/      function getModuleExports() { return module; };\n/******/    __webpack_require__.d(getter, 'a', getter);\n/******/    return getter;\n/******/  };\n\n/******/  // Object.prototype.hasOwnProperty.call\n/******/  __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/  // __webpack_public_path__\n/******/  __webpack_require__.p = \"/\";\n\n/******/  // on error function for async loading\n/******/  __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n  var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n  return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\nvar moduleNameReqExp = '[\\\\.|\\\\-|\\\\+|\\\\w|\\/|@]+'\nvar dependencyRegExp = '\\\\((\\/\\\\*.*?\\\\*\\/)?\\s?.*?(' + moduleNameReqExp + ').*?\\\\)' // additional chars when output.pathinfo is true\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n  return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction getModuleDependencies (sources, module, queueName) {\n  var retval = {}\n  retval[queueName] = []\n\n  var fnString = module.toString()\n  var wrapperSignature = fnString.match(/^function\\s?\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n  if (!wrapperSignature) return retval\n  var webpackRequireName = wrapperSignature[1]\n\n  // main bundle deps\n  var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g')\n  var match\n  while ((match = re.exec(fnString))) {\n    if (match[3] === 'dll-reference') continue\n    retval[queueName].push(match[3])\n  }\n\n  // dll deps\n  re = new RegExp('\\\\(' + quoteRegExp(webpackRequireName) + '\\\\(\"(dll-reference\\\\s(' + moduleNameReqExp + '))\"\\\\)\\\\)' + dependencyRegExp, 'g')\n  while ((match = re.exec(fnString))) {\n    if (!sources[match[2]]) {\n      retval[queueName].push(match[1])\n      sources[match[2]] = __webpack_require__(match[1]).m\n    }\n    retval[match[2]] = retval[match[2]] || []\n    retval[match[2]].push(match[4])\n  }\n\n  return retval\n}\n\nfunction hasValuesInQueues (queues) {\n  var keys = Object.keys(queues)\n  return keys.reduce(function (hasValues, key) {\n    return hasValues || queues[key].length > 0\n  }, false)\n}\n\nfunction getRequiredModules (sources, moduleId) {\n  var modulesQueue = {\n    main: [moduleId]\n  }\n  var requiredModules = {\n    main: []\n  }\n  var seenModules = {\n    main: {}\n  }\n\n  while (hasValuesInQueues(modulesQueue)) {\n    var queues = Object.keys(modulesQueue)\n    for (var i = 0; i < queues.length; i++) {\n      var queueName = queues[i]\n      var queue = modulesQueue[queueName]\n      var moduleToCheck = queue.pop()\n      seenModules[queueName] = seenModules[queueName] || {}\n      if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue\n      seenModules[queueName][moduleToCheck] = true\n      requiredModules[queueName] = requiredModules[queueName] || []\n      requiredModules[queueName].push(moduleToCheck)\n      var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName)\n      var newModulesKeys = Object.keys(newModules)\n      for (var j = 0; j < newModulesKeys.length; j++) {\n        modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []\n        modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]])\n      }\n    }\n  }\n\n  return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n  options = options || {}\n  var sources = {\n    main: __webpack_require__.m\n  }\n\n  var requiredModules = options.all ? { main: Object.keys(sources) } : getRequiredModules(sources, moduleId)\n\n  var src = ''\n\n  Object.keys(requiredModules).filter(function (m) { return m !== 'main' }).forEach(function (module) {\n    var entryModule = 0\n    while (requiredModules[module][entryModule]) {\n      entryModule++\n    }\n    requiredModules[module].push(entryModule)\n    sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })'\n    src = src + 'var ' + module + ' = (' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(entryModule)) + ')({' + requiredModules[module].map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[module][id].toString() }).join(',') + '});\\n'\n  })\n\n  src = src + '(' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.main.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources.main[id].toString() }).join(',') + '})(self);'\n\n  var blob = new window.Blob([src], { type: 'text/javascript' })\n  if (options.bare) { return blob }\n\n  var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n  var workerUrl = URL.createObjectURL(blob)\n  var worker = new window.Worker(workerUrl)\n  worker.objectURL = workerUrl\n\n  return worker\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$846, foreign$847, heap$848) {\n    'use asm';\n    var H$849 = new stdlib$846.Int32Array(heap$848);\n    function hash$850(k$851, x$852) {\n        // k in bytes\n        k$851 = k$851 | 0;\n        x$852 = x$852 | 0;\n        var i$853 = 0, j$854 = 0, y0$855 = 0, z0$856 = 0, y1$857 = 0, z1$858 = 0, y2$859 = 0, z2$860 = 0, y3$861 = 0, z3$862 = 0, y4$863 = 0, z4$864 = 0, t0$865 = 0, t1$866 = 0;\n        y0$855 = H$849[x$852 + 320 >> 2] | 0;\n        y1$857 = H$849[x$852 + 324 >> 2] | 0;\n        y2$859 = H$849[x$852 + 328 >> 2] | 0;\n        y3$861 = H$849[x$852 + 332 >> 2] | 0;\n        y4$863 = H$849[x$852 + 336 >> 2] | 0;\n        for (i$853 = 0; (i$853 | 0) < (k$851 | 0); i$853 = i$853 + 64 | 0) {\n            z0$856 = y0$855;\n            z1$858 = y1$857;\n            z2$860 = y2$859;\n            z3$862 = y3$861;\n            z4$864 = y4$863;\n            for (j$854 = 0; (j$854 | 0) < 64; j$854 = j$854 + 4 | 0) {\n                t1$866 = H$849[i$853 + j$854 >> 2] | 0;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 & y2$859 | ~y1$857 & y3$861) | 0) + ((t1$866 + y4$863 | 0) + 1518500249 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[k$851 + j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 64 | 0; (j$854 | 0) < (k$851 + 80 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 & y2$859 | ~y1$857 & y3$861) | 0) + ((t1$866 + y4$863 | 0) + 1518500249 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 80 | 0; (j$854 | 0) < (k$851 + 160 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 ^ y2$859 ^ y3$861) | 0) + ((t1$866 + y4$863 | 0) + 1859775393 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 160 | 0; (j$854 | 0) < (k$851 + 240 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 & y2$859 | y1$857 & y3$861 | y2$859 & y3$861) | 0) + ((t1$866 + y4$863 | 0) - 1894007588 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 240 | 0; (j$854 | 0) < (k$851 + 320 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 ^ y2$859 ^ y3$861) | 0) + ((t1$866 + y4$863 | 0) - 899497514 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            y0$855 = y0$855 + z0$856 | 0;\n            y1$857 = y1$857 + z1$858 | 0;\n            y2$859 = y2$859 + z2$860 | 0;\n            y3$861 = y3$861 + z3$862 | 0;\n            y4$863 = y4$863 + z4$864 | 0;\n        }\n        H$849[x$852 + 320 >> 2] = y0$855;\n        H$849[x$852 + 324 >> 2] = y1$857;\n        H$849[x$852 + 328 >> 2] = y2$859;\n        H$849[x$852 + 332 >> 2] = y3$861;\n        H$849[x$852 + 336 >> 2] = y4$863;\n    }\n    return { hash: hash$850 };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nvar _this = this;\n\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n  reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n  var i = void 0,\n      om = off % 4,\n      lm = (len + om) % 4,\n      j = len - lm;\n  switch (om) {\n    case 0:\n      H8[off] = str.charCodeAt(start + 3);\n    case 1:\n      H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n    case 2:\n      H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n    case 3:\n      H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n  }\n  if (len < lm + (4 - om)) {\n    return;\n  }\n  for (i = 4 - om; i < j; i = i + 4 | 0) {\n    H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n  }\n  switch (lm) {\n    case 3:\n      H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n    case 2:\n      H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n    case 1:\n      H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n  }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n  var i = void 0,\n      om = off % 4,\n      lm = (len + om) % 4,\n      j = len - lm;\n  switch (om) {\n    case 0:\n      H8[off] = buf[start + 3];\n    case 1:\n      H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n    case 2:\n      H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n    case 3:\n      H8[off + 3 - (om << 1) | 0] = buf[start];\n  }\n  if (len < lm + (4 - om)) {\n    return;\n  }\n  for (i = 4 - om; i < j; i = i + 4 | 0) {\n    H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n  }\n  switch (lm) {\n    case 3:\n      H8[off + j + 1 | 0] = buf[start + j + 2];\n    case 2:\n      H8[off + j + 2 | 0] = buf[start + j + 1];\n    case 1:\n      H8[off + j + 3 | 0] = buf[start + j];\n  }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n  var i = void 0,\n      om = off % 4,\n      lm = (len + om) % 4,\n      j = len - lm;\n  var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n  switch (om) {\n    case 0:\n      H8[off] = buf[3];\n    case 1:\n      H8[off + 1 - (om << 1) | 0] = buf[2];\n    case 2:\n      H8[off + 2 - (om << 1) | 0] = buf[1];\n    case 3:\n      H8[off + 3 - (om << 1) | 0] = buf[0];\n  }\n  if (len < lm + (4 - om)) {\n    return;\n  }\n  for (i = 4 - om; i < j; i = i + 4 | 0) {\n    H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n  }\n  switch (lm) {\n    case 3:\n      H8[off + j + 1 | 0] = buf[j + 2];\n    case 2:\n      H8[off + j + 2 | 0] = buf[j + 1];\n    case 1:\n      H8[off + j + 3 | 0] = buf[j];\n  }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n  if (typeof data === 'string') {\n    return convStr(data, H8, H32, start, len, off);\n  }\n  if (data instanceof Array) {\n    return convBuf(data, H8, H32, start, len, off);\n  }\n  // Safely doing a Buffer check using \"this\" to avoid Buffer polyfill to be included in the dist\n  if (_this && _this.Buffer && _this.Buffer.isBuffer(data)) {\n    return convBuf(data, H8, H32, start, len, off);\n  }\n  if (data instanceof ArrayBuffer) {\n    return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n  }\n  if (data.buffer instanceof ArrayBuffer) {\n    return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n  }\n  if (data instanceof Blob) {\n    return convBlob(data, H8, H32, start, len, off);\n  }\n  throw new Error('Unsupported data type.');\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar Rusha = __webpack_require__(0);\n\nvar _require = __webpack_require__(1),\n    toHex = _require.toHex;\n\nvar Hash = function () {\n  function Hash() {\n    _classCallCheck(this, Hash);\n\n    this._rusha = new Rusha();\n    this._rusha.resetState();\n  }\n\n  Hash.prototype.update = function update(data) {\n    this._rusha.append(data);\n    return this;\n  };\n\n  Hash.prototype.digest = function digest(encoding) {\n    var digest = this._rusha.rawEnd().buffer;\n    if (!encoding) {\n      return digest;\n    }\n    if (encoding === 'hex') {\n      return toHex(digest);\n    }\n    throw new Error('unsupported digest encoding');\n  };\n\n  return Hash;\n}();\n\nmodule.exports = function () {\n  return new Hash();\n};\n\n/***/ })\n/******/ ]);\n});\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = BoxHttp;\n\n__webpack_require__(12);\n\nfunction BoxHttp(options) {\n  if (options.upload) {\n    // Workaround for upload with Fetch library for now...\n    // https://github.com/whatwg/fetch/issues/380\n    return new Promise(function (resolve, reject) {\n      var client = new XMLHttpRequest();\n      var uri = options.url;\n      var method = options.method;\n\n      client.open(method, uri, true);\n      if (options.headers) {\n        if (options.headers[\"Content-Type\"]) {\n          delete options.headers[\"Content-Type\"];\n        }\n        Object.keys(options.headers).forEach(function (key) {\n          client.setRequestHeader(key, options.headers[key]);\n        });\n      }\n      client.send(options.body);\n      client.onload = function () {\n        if (client.status >= 200 && client.status < 300) {\n          resolve(JSON.parse(client.response));\n        } else {\n          reject(handleXMLHttpRequestErrors(client));\n        }\n      };\n      client.onerror = function () {\n        reject(handleXMLHttpRequestErrors(client));\n      };\n    });\n    // Workaround for cancelling requests with Fetch library for now...\n    // https://github.com/whatwg/fetch/issues/380  \n  } else if (!options.useXHR && window && window.fetch) {\n    return fetch(options.url, options).then(handleErrors).then(function (response) {\n      return constructResponse(response, options);\n    });\n  } else {\n    var client = new XMLHttpRequest();\n    var request = new Promise(function (resolve, reject) {\n      var uri = options.url;\n      var method = options.method;\n\n      client.open(method, uri, true);\n      Object.keys(options.headers).forEach(function (key) {\n        client.setRequestHeader(key, options.headers[key]);\n      });\n      client.send(options.body);\n      client.onload = function () {\n        if (client.status >= 200 && client.status < 300) {\n          var returnData = client.response ? JSON.parse(client.response) : {};\n          var headers = void 0;\n          try {\n            headers = parseXHRHeaders(client.getAllResponseHeaders());\n          } catch (e) {\n            headers = client.getAllResponseHeaders();\n          }\n          var builtResponse = {\n            data: returnData,\n            headers: headers,\n            status: client.status,\n            statusText: client.statusText\n          };\n          resolve(constructResponse(builtResponse, options));\n        } else {\n          if (options.hasOwnProperty('verbose') && options.verbose) {\n            console.log(client.getAllResponseHeaders());\n          }\n          reject(handleXMLHttpRequestErrors(client));\n        }\n      };\n      client.onerror = function () {\n        reject(handleXMLHttpRequestErrors(client));\n      };\n    });\n    if (options.returnCancelToken) {\n      var abort = function abort() {\n        client.abort();\n      };\n\n      return {\n        promise: request,\n        abort: abort\n      };\n    } else {\n      return request;\n    }\n  }\n  function handleXMLHttpRequestErrors(client) {\n    var error = void 0;\n    if (client.statusText) {\n      error = new Error(client.statusText);\n    } else {\n      error = new Error(\"Unknown\");\n    }\n\n    var headers = void 0;\n    try {\n      headers = parseXHRHeaders(client.getAllResponseHeaders());\n    } catch (e) {\n      headers = client.getAllResponseHeaders();\n    }\n\n    var responseText = void 0;\n    if (client.response) {\n      try {\n        responseText = JSON.parse(client.response);\n      } catch (e) {\n        responseText = client.response;\n      }\n    } else {\n      responseText = {};\n    }\n    error.response = {};\n    error.response.headers = headers;\n    error.response.status = client.status;\n    error.response.statusText = client.statusText;\n    error.response.data = responseText;\n    return error;\n  }\n  function handleErrors(response) {\n    if (!response.ok) {\n      var error = new Error(response.statusText);\n      if (response) return response.json().catch(function () {\n        return {};\n      }).then(function (body) {\n        error.response = {};\n        if (Object.keys(body).length === 0) {\n          error.response = response;\n        } else {\n          error.response = body;\n        }\n        throw error;\n      });\n    }\n    return response;\n  }\n\n  function constructResponse(response, options) {\n    var verbose = false;\n    if (options.hasOwnProperty('verbose')) {\n      verbose = options.verbose;\n      delete options.verbose;\n    }\n    if (verbose) {\n      console.log('options');\n      console.log(options);\n      console.log('response');\n      console.log(response);\n    }\n    if (options && options.includeFullResponse) {\n      if (response.data && response.headers && response.status) {\n        return new Promise(function (resolve, reject) {\n          resolve(response);\n        });\n      }\n      var buildResponse = {\n        data: {},\n        headers: {},\n        status: \"\"\n      };\n      return new Promise(function (resolve, reject) {\n        var headers = response.headers;\n        var retrieveHeaders = void 0;\n        if (headers && headers.entries && typeof headers.entries === 'function') {\n          retrieveHeaders = {};\n          var iter = headers.entries();\n          var header = iter.next();\n          while (!header.done) {\n            if (header.value && header.value.length && header.value.length === 2) {\n              retrieveHeaders[header.value[0]] = header.value[1];\n            }\n            header = iter.next();\n          }\n        } else {\n          retrieveHeaders = response.headers;\n        }\n        buildResponse.headers = retrieveHeaders;\n        buildResponse.status = response.status;\n        if (checkForJSONResponse(response)) {\n          return response.json().catch(function () {\n            return {};\n          }).then(function (body) {\n            buildResponse.data = body;\n            resolve(buildResponse);\n          });\n        } else if (checkForDataResponse(response)) {\n          return new Promise(function (resolve, reject) {\n            buildResponse.data = response.data;\n            resolve(buildResponse);\n          });\n        } else {\n          resolve(buildResponse);\n        }\n      });\n    } else {\n      if (checkForJSONResponse(response)) {\n        return response.json().catch(function () {\n          return {};\n        });\n      } else if (checkForDataResponse(response)) {\n        return new Promise(function (resolve, reject) {\n          resolve(response.data);\n        });\n      } else {\n        return new Promise(function (resolve, reject) {\n          resolve({});\n        });\n      }\n    }\n  }\n\n  function parseXHRHeaders(headerStr) {\n    var headers = {};\n    if (!headerStr) {\n      return headers;\n    }\n    var headerPairs = headerStr.split(\"\\r\\n\");\n    for (var i = 0; i < headerPairs.length; i++) {\n      var headerPair = headerPairs[i];\n      var index = headerPair.indexOf(\": \");\n      if (index > 0) {\n        var key = headerPair.substring(0, index).toLowerCase();\n        var val = headerPair.substring(index + 2);\n        headers[key] = val;\n      }\n    }\n    return headers;\n  }\n\n  function checkForJSONResponse(response) {\n    return response.json && typeof response.json === 'function' ? true : false;\n  }\n  function checkForDataResponse(response) {\n    return response.data && _typeof(response.data) === 'object' ? true : false;\n  }\n}\nmodule.exports = exports[\"default\"];\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _folders = __webpack_require__(14);\n\nvar _folders2 = _interopRequireDefault(_folders);\n\nvar _files = __webpack_require__(17);\n\nvar _files2 = _interopRequireDefault(_files);\n\nvar _webLinks = __webpack_require__(22);\n\nvar _webLinks2 = _interopRequireDefault(_webLinks);\n\nvar _collaborations = __webpack_require__(23);\n\nvar _collaborations2 = _interopRequireDefault(_collaborations);\n\nvar _collections = __webpack_require__(24);\n\nvar _collections2 = _interopRequireDefault(_collections);\n\nvar _comments = __webpack_require__(25);\n\nvar _comments2 = _interopRequireDefault(_comments);\n\nvar _groups = __webpack_require__(26);\n\nvar _groups2 = _interopRequireDefault(_groups);\n\nvar _metadata = __webpack_require__(27);\n\nvar _metadata2 = _interopRequireDefault(_metadata);\n\nvar _search = __webpack_require__(28);\n\nvar _search2 = _interopRequireDefault(_search);\n\nvar _tasks = __webpack_require__(29);\n\nvar _tasks2 = _interopRequireDefault(_tasks);\n\nvar _users = __webpack_require__(30);\n\nvar _users2 = _interopRequireDefault(_users);\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _boxHttp = __webpack_require__(6);\n\nvar _boxHttp2 = _interopRequireDefault(_boxHttp);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BaseBoxClient = function () {\n  function BaseBoxClient(config) {\n    _classCallCheck(this, BaseBoxClient);\n\n    this._folders = new _folders2.default(this);\n    this._files = new _files2.default(this);\n    this._webLinks = new _webLinks2.default(this);\n    this._collaborations = new _collaborations2.default(this);\n    this._collections = new _collections2.default(this);\n    this._comments = new _comments2.default(this);\n    this._groups = new _groups2.default(this);\n    this._metadata = new _metadata2.default(this);\n    this._search = new _search2.default(this);\n    this._tasks = new _tasks2.default(this);\n    this._users = new _users2.default(this);\n    this._baseApiUrl = config.baseUrl || \"https://api.box.com/2.0\";\n    this._returnsOnlyOptions = config.hasOwnProperty('noRequestMode') && config.noRequestMode === true ? true : false;\n    this._skipValidation = config.hasOwnProperty('skipValidation') && config.skipValidation === true ? true : false;\n    this._simpleMode = config.hasOwnProperty('simpleMode') && config.simpleMode === true ? true : false;\n    this._accessToken = this._checkTokenType(config);\n    this._hasStoredAccessToken = this._accessToken ? true : false;\n    this._verbose = config.hasOwnProperty('verbose') && config.verbose === true ? true : false;\n\n    this.httpService = config.httpService || _boxHttp2.default;\n    this.Promise = config.Promise || Promise;\n  }\n\n  _createClass(BaseBoxClient, [{\n    key: '_checkTokenType',\n    value: function _checkTokenType(token, removeFromOptions) {\n      removeFromOptions = removeFromOptions || false;\n      if (token && typeof token === 'string') {\n        return token;\n      }\n\n      var foundToken = void 0;\n\n      if (token && (typeof token === 'undefined' ? 'undefined' : _typeof(token)) === 'object') {\n        if (token.hasOwnProperty('accessToken')) {\n          foundToken = token.accessToken;\n          if (removeFromOptions) {\n            delete token.accessToken;\n          }\n        }\n\n        if (token.hasOwnProperty('access_token')) {\n          foundToken = token.access_token;\n          if (removeFromOptions) {\n            delete token.access_token;\n          }\n        }\n      }\n\n      return foundToken;\n    }\n  }, {\n    key: '_handleAuthorization',\n    value: function _handleAuthorization(options, accessToken) {\n      if (accessToken) {\n        return this._constructHeaders(options, accessToken);\n      }\n\n      if (options && options.accessToken || options.access_token) {\n        var _accessToken = options.accessToken || options.access_token;\n        options.accessToken ? delete options.accessToken : delete options.access_token;\n        return this._constructHeaders(options, _accessToken);\n      } else if (this._hasStoredAccessToken) {\n        return this._constructHeaders(options, this._accessToken);\n      } else {\n        var token = this._checkTokenType(options, true);\n        return this._constructHeaders(options, token);\n      }\n    }\n  }, {\n    key: '_constructHeaders',\n    value: function _constructHeaders(options, accessToken) {\n      var headers = {};\n      if (accessToken) {\n        headers[_boxConstants2.default.HEADER_AUTHORIZATION] = this._constructAuthorizationHeader(accessToken);\n      }\n\n      if (options.headers) {\n        Object.assign(headers, options.headers);\n      }\n\n      return headers;\n    }\n  }, {\n    key: '_constructAuthorizationHeader',\n    value: function _constructAuthorizationHeader(accessToken) {\n      return '' + _boxConstants2.default.HEADER_AUTHORIZATION_PREFIX + accessToken;\n    }\n  }, {\n    key: '_checkForEmptyObjects',\n    value: function _checkForEmptyObjects(options) {\n      var _this = this;\n\n      Object.keys(options).map(function (field) {\n        if (field !== \"body\" && field !== \"upload\" && field !== \"chunkedUpload\" && field !== \"useXHR\" && field !== \"returnCancelToken\" && field !== \"returnsOnlyOptions\" && field !== \"includeFullResponse\" && _this._isEmpty(options[field])) {\n          delete options[field];\n        }\n      });\n    }\n  }, {\n    key: '_isEmpty',\n    value: function _isEmpty(object) {\n      for (var key in object) {\n        if (object.hasOwnProperty(key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }, {\n    key: '_applyFields',\n    value: function _applyFields(options) {\n      options.params = options.params || {};\n      if (options.fields) {\n        options.params.fields = options.fields;\n        delete options.fields;\n      }\n      return options.params;\n    }\n  }, {\n    key: '_formatOptions',\n    value: function _formatOptions(options) {\n      if (options.chunkedUpload) {\n        return options;\n      }\n\n      var formattedOptions = {};\n      options.useXHR ? formattedOptions.useXHR = true : null;\n      options.returnCancelToken ? formattedOptions.returnCancelToken = true : null;\n      options.includeFullResponse ? formattedOptions.includeFullResponse = true : null;\n      var uri = options.url;\n\n      if (options.params) {\n        uri += '?';\n        uri += Object.keys(options.params).map(function (key) {\n          return encodeURIComponent(key) + '=' + encodeURIComponent(options.params[key]);\n        }).join('&');\n      }\n      formattedOptions.url = uri;\n      formattedOptions.headers = options.headers;\n\n      if (options.upload) {\n        options.headers['Content-Type'] = \"multipart/form-data\";\n        options.mode = 'cors';\n        return options;\n      }\n\n      if (options.body && _typeof(options.body) === 'object' && !options.upload) {\n        formattedOptions.body = JSON.stringify(options.body);\n        if (!formattedOptions.headers['Content-Type']) {\n          formattedOptions.headers['Content-Type'] = \"application/json;charset=UTF-8\";\n        }\n      }\n\n      formattedOptions.method = options.method;\n      formattedOptions.data = options.body;\n      formattedOptions.mode = 'cors';\n      return formattedOptions;\n    }\n  }, {\n    key: '_handleAngularFileUpload',\n    value: function _handleAngularFileUpload($http, options) {\n      options.headers['Content-Type'] = undefined;\n      return $http.post(options.url, options.body, {\n        headers: options.headers\n      });\n    }\n  }, {\n    key: 'folders',\n    get: function get() {\n      return this._folders;\n    }\n  }, {\n    key: 'files',\n    get: function get() {\n      return this._files;\n    }\n  }, {\n    key: 'webLinks',\n    get: function get() {\n      return this._webLinks;\n    }\n  }, {\n    key: 'collaborations',\n    get: function get() {\n      return this._collaborations;\n    }\n  }, {\n    key: 'collections',\n    get: function get() {\n      return this._collections;\n    }\n  }, {\n    key: 'comments',\n    get: function get() {\n      return this._comments;\n    }\n  }, {\n    key: 'groups',\n    get: function get() {\n      return this._groups;\n    }\n  }, {\n    key: 'metadata',\n    get: function get() {\n      return this._metadata;\n    }\n  }, {\n    key: 'search',\n    get: function get() {\n      return this._search;\n    }\n  }, {\n    key: 'tasks',\n    get: function get() {\n      return this._tasks;\n    }\n  }, {\n    key: 'users',\n    get: function get() {\n      return this._users;\n    }\n  }]);\n\n  return BaseBoxClient;\n}();\n\nexports.default = BaseBoxClient;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (values) {\n  return Object.keys(values).map(function (key) {\n    return values[key];\n  });\n};\n\nmodule.exports = exports[\"default\"];\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = Base64ArrayBuffer;\nfunction Base64ArrayBuffer(arrayBuffer) {\n    var base64 = '';\n    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n    var bytes = new Uint8Array(arrayBuffer);\n    var byteLength = bytes.byteLength;\n    var byteRemainder = byteLength % 3;\n    var mainLength = byteLength - byteRemainder;\n\n    var a, b, c, d;\n    var chunk;\n\n    for (var i = 0; i < mainLength; i = i + 3) {\n        chunk = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];\n\n        a = (chunk & 16515072) >> 18;\n        b = (chunk & 258048) >> 12;\n        c = (chunk & 4032) >> 6;\n        d = chunk & 63;\n\n        base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n    }\n\n    if (byteRemainder == 1) {\n        chunk = bytes[mainLength];\n\n        a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n        b = (chunk & 3) << 4; // 3   = 2^2 - 1\n        base64 += encodings[a] + encodings[b] + '==';\n    } else if (byteRemainder == 2) {\n        chunk = bytes[mainLength] << 8 | bytes[mainLength + 1];\n\n        a = (chunk & 64512) >> 10;\n        b = (chunk & 1008) >> 4;\n        c = (chunk & 15) << 2;\n        base64 += encodings[a] + encodings[b] + encodings[c] + '=';\n    }\n\n    return base64;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function () {\n  return window && window.FileReader || FileReader ? true : false;\n};\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _boxHttp = __webpack_require__(6);\n\nvar _boxHttp2 = _interopRequireDefault(_boxHttp);\n\nvar _basicBoxClient = __webpack_require__(13);\n\nvar _basicBoxClient2 = _interopRequireDefault(_basicBoxClient);\n\nvar _persistentBoxClient = __webpack_require__(31);\n\nvar _persistentBoxClient2 = _interopRequireDefault(_persistentBoxClient);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SDK = function () {\n  function SDK() {\n    _classCallCheck(this, SDK);\n\n    this._BasicBoxClient = _basicBoxClient2.default;\n    this._PersistentBoxClient = _persistentBoxClient2.default;\n  }\n\n  _createClass(SDK, [{\n    key: 'BasicBoxClient',\n    get: function get() {\n      return this._BasicBoxClient;\n    }\n  }, {\n    key: 'PersistentBoxClient',\n    get: function get() {\n      return this._PersistentBoxClient;\n    }\n  }]);\n\n  return SDK;\n}();\n\nexports.default = SDK;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_12__;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _baseBoxClient = __webpack_require__(7);\n\nvar _baseBoxClient2 = _interopRequireDefault(_baseBoxClient);\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BasicBoxClient = function (_BaseBoxClient) {\n  _inherits(BasicBoxClient, _BaseBoxClient);\n\n  function BasicBoxClient(config) {\n    _classCallCheck(this, BasicBoxClient);\n\n    config = config || {};\n    return _possibleConstructorReturn(this, (BasicBoxClient.__proto__ || Object.getPrototypeOf(BasicBoxClient)).call(this, config));\n  }\n\n  _createClass(BasicBoxClient, [{\n    key: 'makeRequest',\n    value: function makeRequest(path, options) {\n      options = options || {};\n      options.url = options.url || '' + this._baseApiUrl + path;\n      options.headers = this._handleAuthorization(options);\n      options.params = this._applyFields(options);\n      this._checkForEmptyObjects(options);\n      options = this._formatOptions(options);\n      if (this._returnsOnlyOptions || options.returnsOnlyOptions) {\n        if (options.upload) {\n          options.headers[\"Content-Type\"] = undefined;\n          delete options.upload;\n        }\n        return options;\n      } else if (this.httpService.defaults && options.upload) {\n        return this._handleAngularFileUpload(this.httpService, options);\n      } else {\n        options.verbose = this._verbose;\n        return this.httpService(options);\n      }\n    }\n  }, {\n    key: 'removeAccessTokenAndRerunRequest',\n    value: function removeAccessTokenAndRerunRequest(options, accessToken, setAsNewAccessToken) {\n      setAsNewAccessToken = setAsNewAccessToken || false;\n      if (options.setAsNewAccessToken) {\n        setAsNewAccessToken = options.setAsNewAccessToken;\n        delete options.setAsNewAccessToken;\n      }\n\n      if (!accessToken) {\n        accessToken = this._checkTokenType(options, true);\n      }\n\n      if (options.headers && options.headers[_boxConstants2.default.HEADER_AUTHORIZATION]) {\n        delete options.headers[_boxConstants2.default.HEADER_AUTHORIZATION];\n      }\n\n      this.removeAccessToken();\n\n      if (setAsNewAccessToken) {\n        this.removeAccessToken();\n        this._accessToken = this._checkTokenType(accessToken);\n        this._hasStoredAccessToken = true;\n      }\n\n      options.headers = this._handleAuthorization(options, accessToken);\n      options = this._formatOptions(options);\n      return BoxHttp(options);\n    }\n  }, {\n    key: 'removeAccessToken',\n    value: function removeAccessToken() {\n      this._accessToken = null;\n      this._hasStoredAccessToken = false;\n    }\n  }]);\n\n  return BasicBoxClient;\n}(_baseBoxClient2.default);\n\nexports.default = BasicBoxClient;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _createRequestBody = __webpack_require__(4);\n\nvar _createRequestBody2 = _interopRequireDefault(_createRequestBody);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/folders';\nvar MODEL_VALUES = {\n  NAME: 'name',\n  PARENT: 'parent',\n  ID: 'parent.id',\n  DESCRIPTION: 'description',\n  SHARED_LINK: 'shared_link',\n  SHARED_LINK_ACCESS: 'shared_link.access',\n  UNSHARED_AT: 'shared_link.unshared_at',\n  PASSWORD: 'shared_link.password',\n  PERMISSIONS: 'shared_link.permissions',\n  CAN_DOWNLOAD: 'shared_link.permissions.can_download',\n  CAN_PREVIEW: 'shared_link.permissions.can_preview',\n  FOLDER_UPLOAD_EMAIL: 'folder_upload_email',\n  FOLDER_UPLOAD_EMAIL_ACCESS: 'folder_upload_email.access',\n  OWNED_BY: 'owned_by',\n  OWNED_BY_ID: 'owned_by.id',\n  SYNC_STATE: 'sync_state',\n  TAGS: 'tags'\n};\n\nvar Folders = function (_Manager) {\n  _inherits(Folders, _Manager);\n\n  function Folders(client) {\n    _classCallCheck(this, Folders);\n\n    return _possibleConstructorReturn(this, (Folders.__proto__ || Object.getPrototypeOf(Folders)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Folders, [{\n    key: '_getFolder',\n    value: function _getFolder(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n\n      if (options.folder) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.folder, values);\n        };\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.folder, this.FLATTENED_VALUES);\n        }\n        options.body = (0, _createRequestBody2.default)(options.folder, this.ALL_VALUES, ignoreModelValues);\n        delete options.folder;\n      } else {\n        _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_objectifyString', this).call(this, options) || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + folderId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getItems',\n    value: function getItems(options) {\n      options = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_objectifyString', this).call(this, options) || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + folderId + '/items';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getCollaborations',\n    value: function getCollaborations(options) {\n      options = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_objectifyString', this).call(this, options) || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + folderId + '/collaborations';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getTrashedItems',\n    value: function getTrashedItems(options) {\n      options = options || {};\n      var apiPath = BASE_PATH + '/trash/items';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getTrashedFolder',\n    value: function getTrashedFolder(options) {\n      options = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_objectifyString', this).call(this, options) || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n\n      var apiPath = BASE_PATH + '/' + folderId + '/trash';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'create',\n    value: function create(options) {\n      options = options || {};\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [MODEL_VALUES.PARENT, MODEL_VALUES.ID, MODEL_VALUES.NAME];\n        var skipValidation = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getFolder(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'update',\n    value: function update(options) {\n      options = options || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getFolder(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + folderId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'copy',\n    value: function copy(options) {\n      options = options || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setIgnoreModelValues', this).call(this, options);\n        var REQUIRED_VALUES = [MODEL_VALUES.PARENT, MODEL_VALUES.ID];\n        this._getFolder(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n\n        if (options.newName) {\n          options.body.name = options.newName;\n          delete options.newName;\n        }\n      }\n      var apiPath = BASE_PATH + '/' + folderId + '/copy';\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'createSharedLink',\n    value: function createSharedLink(options) {\n      options = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_objectifyString', this).call(this, options) || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n      return _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_createSharedLink', this).call(this, options, folderId, BASE_PATH, this.FLATTENED_VALUES);\n    }\n  }, {\n    key: 'updateCollections',\n    value: function updateCollections(options) {\n      options = options || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n\n      if (options.collections) {\n        options.body.collections = options.collections;\n        delete options.collections;\n      }\n\n      var apiPath = BASE_PATH + '/' + folderId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'restore',\n    value: function restore(options) {\n      options = options || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getFolder(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + folderId;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(options) {\n      options = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_objectifyString', this).call(this, options) || {};\n      options.params = options.params || {};\n      options.params.recursive = options.params.recursive || true;\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n\n      var apiPath = BASE_PATH + '/' + folderId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'permanentlyDelete',\n    value: function permanentlyDelete(options) {\n      options = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_objectifyString', this).call(this, options) || {};\n      var folderId = _get(Folders.prototype.__proto__ || Object.getPrototypeOf(Folders.prototype), '_getFolderId', this).call(this, options);\n\n      var apiPath = BASE_PATH + '/' + folderId + '/trash';\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Folders;\n}(_manager2.default);\n\nexports.default = Folders;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _mapValues = __webpack_require__(8);\n\nvar _mapValues2 = _interopRequireDefault(_mapValues);\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MODE_VALUES = (0, _mapValues2.default)(_boxConstants2.default.MODES);\n\nexports.default = function (options, mode) {\n  var runMode = void 0;\n  if (MODE_VALUES.indexOf(mode) !== -1) {\n    runMode = options[mode];\n    delete options[mode];\n  }\n  return runMode;\n};\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (values) {\n  values = Array.prototype.concat.apply([], values.map(function (value) {\n    if (value.indexOf('.') !== -1) {\n      var split = value.split('.');\n      return split.filter(function (value) {\n        return values.indexOf(value) === -1;\n      });\n    } else {\n      return value;\n    }\n  }));\n\n  return values;\n};\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _chunkedUploader = __webpack_require__(18);\n\nvar _chunkedUploader2 = _interopRequireDefault(_chunkedUploader);\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _createRequestBody = __webpack_require__(4);\n\nvar _createRequestBody2 = _interopRequireDefault(_createRequestBody);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nvar _generateSha = __webpack_require__(19);\n\nvar _generateSha2 = _interopRequireDefault(_generateSha);\n\nvar _generateMd = __webpack_require__(20);\n\nvar _generateMd2 = _interopRequireDefault(_generateMd);\n\nvar _checkForFormData = __webpack_require__(21);\n\nvar _checkForFormData2 = _interopRequireDefault(_checkForFormData);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/files';\nvar LOCK = 'lock';\nvar UPLOAD_PATH = 'https://upload.box.com/api/2.0';\nvar MODEL_VALUES = {\n  NAME: 'name',\n  PARENT: 'parent',\n  ID: 'parent.id',\n  DESCRIPTION: 'description',\n  SHARED_LINK: 'shared_link',\n  SHARED_LINK_ACCESS: 'shared_link.access',\n  UNSHARED_AT: 'shared_link.unshared_at',\n  PERMISSIONS: 'shared_link.permissions',\n  CAN_DOWNLOAD: 'shared_link.permissions.can_download',\n  CAN_PREVIEW: 'shared_link.permissions.can_preview',\n  FOLDER_UPLOAD_EMAIL: 'folder_upload_email',\n  FOLDER_UPLOAD_EMAIL_ACCESS: 'folder_upload_email.access',\n  OWNED_BY: 'owned_by',\n  OWNED_BY_ID: 'owned_by.id',\n  SYNC_STATE: 'sync_state',\n  TAGS: 'tags',\n  SIZE: 'size'\n};\n\nvar DIMENSION_VALUES = {\n  MIN_HEIGHT: 'min_height',\n  MAX_HEIGHT: 'max_height',\n  MIN_WIDTH: 'min_width',\n  MAX_WIDTH: 'max_width'\n};\n\nvar DIMENSIONS = Object.keys(DIMENSION_VALUES).map(function (key) {\n  return DIMENSION_VALUES[key];\n});\n\nvar MINIMUM_CHUNKED_FILE_SIZE = 50000000;\n\nvar Files = function (_Manager) {\n  _inherits(Files, _Manager);\n\n  function Files(client) {\n    _classCallCheck(this, Files);\n\n    var _this = _possibleConstructorReturn(this, (Files.__proto__ || Object.getPrototypeOf(Files)).call(this, client, MODEL_VALUES));\n\n    _this.UPLOAD_PATH = UPLOAD_PATH;\n    return _this;\n  }\n\n  _createClass(Files, [{\n    key: '_getVersionId',\n    value: function _getVersionId(options) {\n      var versionId = void 0;\n      if (options.versionId || options.version_id) {\n        versionId = options.versionId || options.version_id;\n        options.versionId ? delete options.versionId : options.version_id;\n      }\n      _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_testForMissingId', this).call(this, versionId, _boxConstants2.default.VERSION, _boxConstants2.default.VERSION_ID);\n      return versionId;\n    }\n  }, {\n    key: '_getFile',\n    value: function _getFile(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n\n      if (options.file) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.file, values);\n        };\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.file, this.FLATTENED_VALUES);\n        }\n        options.body = (0, _createRequestBody2.default)(options.file, this.ALL_VALUES, ignoreModelValues);\n        delete options.file;\n      } else {\n        _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n\n    // Currently not possible due to CORS\n    // Need to implement your own server endpoint\n    // and retrieve download redirect url.\n    // download(options) {\n    //   options.params = options.params || {};\n\n    //   let versionId = options.versionId || '';\n    //   if (versionId) {\n    //     options.params.version = versionId;\n    //   }\n\n    //   let fileId = super._getFileId(options);\n\n    //   let apiPath = `${BASE_PATH}/${fileId}/content`;\n    //   options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    //   return this.client.makeRequest(apiPath, options);\n    // }\n\n  }, {\n    key: 'getDownloadUrl',\n    value: function getDownloadUrl(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      options.params = options.params || {};\n      if (options.fields || options.params.fields) {\n        options.params.fields = options.params.fields ? options.params.fields : options.fields;\n        options.params.fields = options.params.fields.concat(',download_url');\n      } else {\n        options.params = {\n          fields: \"download_url\"\n        };\n      }\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n\n    // Be careful, this is an experimental and untested method.\n    // Use at your own risk!\n    // Tested lightly with Angular 1 and vanilla JS in lastest build of Chrome Version 59.0.3071.115 on MacOS\n\n  }, {\n    key: 'chunkedUpload',\n    value: function chunkedUpload(options) {\n      options = options || {};\n      if (!options.file) {\n        throw new Error(\"Must make this call with an HTML5 File object.\");\n      }\n      if (options.file && options.file.size < MINIMUM_CHUNKED_FILE_SIZE) {\n        throw new Error(\"File size less than minimum allowed for this API: 50000000\");\n      }\n      options.name = options.name || options.file.name;\n      var session = new _chunkedUploader2.default(this, options.name, options.file, options.parentFolder, options.listeners);\n      return session.startSession();\n    }\n\n    // Be careful, this is an experimental and untested method.\n    // Use at your own risk!\n    // Tested lightly with Angular 1 and vanilla JS in lastest build of Chrome Version 59.0.3071.115 on MacOS\n\n  }, {\n    key: 'chunkedUploadNewFileVersion',\n    value: function chunkedUploadNewFileVersion(options) {\n      options = options || {};\n      if (!options.id) {\n        throw new Error(\"chunkedUploadNewVersion requires an existing file ID\");\n      }\n      if (!options.file) {\n        throw new Error(\"Must make this call with an HTML5 File object.\");\n      }\n      if (options.file && options.file.size < MINIMUM_CHUNKED_FILE_SIZE) {\n        throw new Error(\"File size less than minimum allowed for this API: 50000000\");\n      }\n      options.name = options.name || options.file.name;\n      var session = new _chunkedUploader2.default(this, options.name, options.file, options.parentFolder, options.listeners, options.id);\n      return session.startSession();\n    }\n  }, {\n    key: 'upload',\n    value: function upload(options) {\n      options = options || {};\n      options.url = options.url || UPLOAD_PATH + '/files/content';\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      options.upload = true;\n      return this.client.makeRequest(null, options);\n    }\n  }, {\n    key: 'uploadNewFileVersion',\n    value: function uploadNewFileVersion(options) {\n      if (!(0, _checkForFormData2.default)()) {\n        throw new Error(\"Form Data not supported. The uploadNewFileVersion requires Form Data in the browser.\");\n      }\n      options = options || {};\n      var fileId = options.body.get(\"id\") || options.body.get(\"fileId\") || options.body.get(\"file_id\");\n      options.url = options.url || UPLOAD_PATH + '/files/' + fileId + '/content';\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      options.upload = true;\n      return this.client.makeRequest(null, options);\n    }\n\n    // Be careful, this is an experimental and untested method.\n    // Use at your own risk!\n\n  }, {\n    key: 'uploadWithPreflightAndMd5',\n    value: function uploadWithPreflightAndMd5(options) {\n      var _this2 = this;\n\n      options = options || {};\n      var file = options.file;\n      var formData = options.body;\n      var preflightOptions = { name: options.name, parent: options.parent, size: options.file.size };\n      var decorateOptions = JSON.parse(JSON.stringify(options));\n      return this.preflightCheck(preflightOptions).then(function (resp) {\n        if (resp.upload_url) {\n          decorateOptions.url = resp.upload_url;\n        }\n        return;\n      }).then(function () {\n        if (file === undefined) {\n          throw new Error(\"Couldn't access file...\");\n        }\n        return (0, _generateMd2.default)(file);\n      }).then(function (md5) {\n        decorateOptions.headers = decorateOptions.headers || {};\n        decorateOptions.body = formData;\n        delete decorateOptions.file;\n        decorateOptions.headers[\"Content-MD5\"] = md5;\n        return _this2.upload(decorateOptions);\n      });\n    }\n  }, {\n    key: 'uploadNewFileVersionWithPreflightAndMd5',\n    value: function uploadNewFileVersionWithPreflightAndMd5(options) {\n      var _this3 = this;\n\n      if (!(0, _checkForFormData2.default)()) {\n        throw new Error(\"Form Data not supported. The uploadNewFileVersion requires Form Data in the browser.\");\n      }\n      options = options || {};\n      var file = options.file;\n      var formData = options.body;\n      var decorateOptions = JSON.parse(JSON.stringify(options));\n      options.fileId = options.body.get(\"id\") || options.body.get(\"fileId\") || options.body.get(\"file_id\");\n      return this.preflightCheckNewFileVersion(options).then(function (resp) {\n        if (resp.upload_url) {\n          decorateOptions.url = resp.upload_url;\n        }\n        return;\n      }).then(function () {\n        if (file === undefined) {\n          throw new Error(\"Couldn't access file...\");\n        }\n        return (0, _generateMd2.default)(file);\n      }).then(function (md5) {\n        decorateOptions.headers = decorateOptions.headers || {};\n        decorateOptions.body = formData;\n        delete decorateOptions.file;\n        decorateOptions.headers[\"Content-MD5\"] = md5;\n        return _this3.uploadNewFileVersion(decorateOptions);\n      });\n    }\n  }, {\n    key: 'preflightCheck',\n    value: function preflightCheck(options) {\n      options = options || {};\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [MODEL_VALUES.SIZE, MODEL_VALUES.NAME];\n        var skipValidation = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getFile(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/content';\n      options.method = _boxConstants2.default.HTTP_VERBS.OPTIONS;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'preflightCheckNewFileVersion',\n    value: function preflightCheckNewFileVersion(options) {\n      options = options || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [MODEL_VALUES.SIZE, MODEL_VALUES.NAME];\n        var skipValidation = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getFile(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + fileId + '/content';\n      options.method = _boxConstants2.default.HTTP_VERBS.OPTIONS;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'update',\n    value: function update(options) {\n      options = options || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      options.url = options.url || UPLOAD_PATH + '/' + fileId + '/content';\n      this.upload(options);\n    }\n  }, {\n    key: 'getComments',\n    value: function getComments(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + fileId + '/comments';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getTasks',\n    value: function getTasks(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + fileId + '/tasks';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getEmbedLink',\n    value: function getEmbedLink(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      options.params = options.params || {};\n      if (options.fields || options.params.fields) {\n        if (options.fields) {\n          options.params.fields = options.fields;\n          delete options.fields;\n        }\n        options.params.fields = options.params.fields.concat(',expiring_embed_link');\n      } else {\n        options.params.fields = 'expiring_embed_link';\n      }\n\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getVersions',\n    value: function getVersions(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      var apiPath = BASE_PATH + '/' + fileId + '/versions';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getThumbnail',\n    value: function getThumbnail(options) {\n      options = options || {};\n      options.extension = options.extension || '.png';\n      options.params = options.params || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      Object.keys(options).map(function (key) {\n        if (DIMENSIONS.indexOf(key) !== -1) {\n          options.params[key] = options[key];\n          delete options[key];\n        }\n      });\n\n      var apiPath = BASE_PATH + '/' + fileId + '/thumbnail' + options.extension;\n      delete options.extension;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getTrashedFile',\n    value: function getTrashedFile(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      var apiPath = BASE_PATH + '/' + fileId + '/trash';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getCollaborations',\n    value: function getCollaborations(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + fileId + '/collaborations';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'createSharedLink',\n    value: function createSharedLink(options) {\n      options = options || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      return _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_createSharedLink', this).call(this, options, fileId, BASE_PATH, this.FLATTENED_VALUES);\n    }\n  }, {\n    key: 'promoteVersion',\n    value: function promoteVersion(options) {\n      options = options || {};\n      options.body = options.body || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      if (!options.body.id) {\n        var versionId = this._getVersionId(options);\n        options.body.id = versionId;\n      }\n\n      options.body.type = 'file_version';\n\n      var apiPath = BASE_PATH + '/' + fileId + '/versions/current';\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'copy',\n    value: function copy(options) {\n      options = options || {};\n      options.body = options.body || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      if (!options.body.parent && !options.body.parent.id) {\n        options.body.parent = {};\n        if (options.id) {\n          options.body.parent.id = options.id;\n          delete options.id;\n        } else if (options.parentId) {\n          options.body.parent.id = options.parentId;\n          delete options.parentId;\n        } else {\n          throw new Error(\"A parentId or id is required for this API call.\");\n        }\n      }\n\n      if (options.name) {\n        options.body.name = options.name;\n        delete options.name;\n      } else if (options.newName) {\n        options.body.name = options.newName;\n        delete options.newName;\n      }\n\n      var apiPath = BASE_PATH + '/' + fileId + '/copy';\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'updateInfo',\n    value: function updateInfo(options) {\n      options = options || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getFile(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'lock',\n    value: function lock(options) {\n      options = options || {};\n      options.body = options.body || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      if (options[LOCK]) {\n        options.body[LOCK] = options[LOCK];\n        options.body[LOCK].type = LOCK;\n        delete options[LOCK];\n      } else {\n        options.body.lock = {\n          type: LOCK\n        };\n      }\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'unlock',\n    value: function unlock(options) {\n      options = options || {};\n      options.body = options.body || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      if (options[LOCK]) {\n        delete options[LOCK];\n      }\n      options.body[LOCK] = null;\n\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'restore',\n    value: function restore(options) {\n      options = options || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      if (options.parent) {\n        options.body = options.body || {};\n        options.body.parent = options.parent;\n        delete options.parent;\n      }\n\n      if (options.name) {\n        options.body = options.body || {};\n        options.body.name = options.name;\n        delete options.name;\n      }\n\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      var apiPath = BASE_PATH + '/' + fileId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'deleteVersion',\n    value: function deleteVersion(options) {\n      options = options || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n      var versionId = this._getVersionId(options);\n\n      var apiPath = BASE_PATH + '/' + fileId + '/versions/' + versionId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'permanentlyDelete',\n    value: function permanentlyDelete(options) {\n      options = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_objectifyString', this).call(this, options) || {};\n      var fileId = _get(Files.prototype.__proto__ || Object.getPrototypeOf(Files.prototype), '_getFileId', this).call(this, options);\n\n      var apiPath = BASE_PATH + '/' + fileId + '/trash';\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'createSHA1Hash',\n    value: function createSHA1Hash(blob) {\n      return (0, _generateSha2.default)(blob);\n    }\n  }]);\n\n  return Files;\n}(_manager2.default);\n\nexports.default = Files;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _base64ArrayBuffer = __webpack_require__(9);\n\nvar _base64ArrayBuffer2 = _interopRequireDefault(_base64ArrayBuffer);\n\nvar _rusha = __webpack_require__(5);\n\nvar _rusha2 = _interopRequireDefault(_rusha);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PROGRESS_EVENT_NAME = \"boxChunkedUploadProgress\";\nvar FAILURE_EVENT_NAME = \"boxChunkedUploadFailure\";\nvar SUCCESS_EVENT_NAME = \"boxChunkedUploadSuccess\";\nvar START_EVENT_NAME = \"boxChunkedUploadStart\";\nvar FILE_COMMIT_EVENT_NAME = \"boxChunkedUploadFileCommitted\";\nvar FILE_COMMIT_RETRY_EVENT_NAME = \"boxChunkedUploadFileCommitRetry\";\nvar COMPLETED_EVENT_NAME = \"boxChunkedUploadCompleted\";\nvar START_CANCELLING_EVENT_NAME = \"boxChunkedUploadStartCancelling\";\nvar END_CANCELLING_EVENT_NAME = \"boxChunkedUploadEndCancelling\";\nvar ABORT_UPLOAD_EVENT_NAME = \"boxChunkedUploadAbortUpload\";\n\nvar ChunkedUploader = function () {\n    function ChunkedUploader(filesManager, fileName, file, parentFolder, listeners, newVersionFileId) {\n        _classCallCheck(this, ChunkedUploader);\n\n        this.rusha = new _rusha2.default();\n        this.hash = _rusha2.default.createHash();\n        this.filesManager = filesManager;\n        this.client = filesManager.client;\n        this.file = file;\n        this.fileName = fileName;\n        this.newVersionFileId = newVersionFileId || \"\";\n        this.parts = [];\n        this.tasks = [];\n        this.partRequestCancellations = [];\n        this.parentFolder = parentFolder;\n        this.session = {\n            id: \"\",\n            endpoints: {\n                listParts: \"\",\n                commit: \"\",\n                uploadPart: \"\",\n                status: \"\",\n                abort: \"\"\n            },\n            expiresAt: \"\",\n            partSize: 0,\n            totalParts: 0,\n            fileDigest: {}\n        };\n        this.getFailureNotification = listeners.getFailureNotification || null;\n        this.getSuccessNotification = listeners.getSuccessNotification || null;\n        this.getStartNotification = listeners.getStartNotification || null;\n        this.getFileCommitNotification = listeners.getFileCommitNotification || null;\n        this.getFileCommitRetryNotification = listeners.getFileCommitRetryNotification || null;\n        this.getCompletedNotification = listeners.getCompletedNotification || null;\n        this.getIsCancellingNotification = listeners.getIsCancellingNotification || null;\n        this.getIsCancelledNotification = listeners.getIsCancelledNotification || null;\n        this.handleProgressUpdates = listeners.handleProgressUpdates || null;\n        this.progress = {\n            isCancelled: false,\n            isComplete: false,\n            didStart: false,\n            didFail: false,\n            didSucceed: false,\n            didFileCommit: false,\n            didSessionStart: false,\n            percentageProcessed: 0,\n            percentageUploaded: 0,\n            fileCommitRetryTime: 0,\n            session: {}\n        };\n        this.retry = 0;\n        this.uploadCount = 0;\n        this.processedCount = 0;\n        this.isCancelled = false;\n        this.finishedCancelling = false;\n        this.finishedUploading = false;\n        this.retryCommitTimer = null;\n\n        var self = this;\n        this.abortUpload = function (evt) {\n            if (self.retryCommitTimer) {\n                clearTimeout(self.retryCommitTimer);\n            }\n            self.partRequestCancellations.forEach(function (part) {\n                if (part.abort) {\n                    part.abort();\n                }\n            });\n            self.isCancelled = true;\n            if (self.getIsCancellingNotification !== null) {\n                self.progress.didFileCommit = false;\n                self.progress.didSucceed = false;\n                self.progress.didFail = false;\n                self.fireEvent(self.progress, START_CANCELLING_EVENT_NAME);\n            }\n            if (self.session && self.session.endpoints && self.session.endpoints.abort) {\n                var options = {};\n                options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n                options.url = self.session.endpoints.abort;\n                return self.client.makeRequest(null, options).then(function (resp) {\n                    if (self.getIsCancelledNotification !== null) {\n                        self.fireEndCancellingEvent();\n                    }\n                    self.endSession();\n                    self.finishedCancelling = true;\n                }).catch(function (e) {\n                    if (self.getIsCancelledNotification !== null) {\n                        self.fireEndCancellingEvent();\n                    }\n                    self.endSession();\n                    self.finishedCancelling = true;\n                });\n            } else {\n                if (self.getIsCancelledNotification !== null) {\n                    self.fireEndCancellingEvent();\n                }\n                self.finishedCancelling = true;\n                self.endSession();\n            }\n        };\n        addEventListener(ABORT_UPLOAD_EVENT_NAME, this.abortUpload);\n    }\n\n    _createClass(ChunkedUploader, [{\n        key: 'fireEndCancellingEvent',\n        value: function fireEndCancellingEvent() {\n            var self = this;\n            self.progress.didFileCommit = false;\n            self.progress.didSucceed = false;\n            self.progress.didFail = false;\n            self.progress.isComplete = true;\n            self.progress.isCancelled = true;\n            self.fireEvent(self.progress, END_CANCELLING_EVENT_NAME);\n        }\n    }, {\n        key: 'endSession',\n        value: function endSession() {\n            this.removeListeners();\n            this.session = null;\n            this.filesManager = null;\n            this.client = null;\n            this.file = null;\n            this.fileName = null;\n            this.parts = null;\n            this.tasks = null;\n            this.partRequestCancellations = null;\n            this.parentFolder = null;\n            this.retry = null;\n            this.uploadCount = null;\n            this.processedCount = null;\n            this.isCancelled = null;\n            this.finishedCancelling = null;\n            this.finishedUploading = null;\n            this.abortUpload = null;\n        }\n    }, {\n        key: 'addListeners',\n        value: function addListeners() {\n            if (this.getFailureNotification !== null) {\n                addEventListener(FAILURE_EVENT_NAME, this.getFailureNotification);\n            }\n            if (this.getSuccessNotification !== null) {\n                addEventListener(SUCCESS_EVENT_NAME, this.getSuccessNotification);\n            }\n            if (this.getStartNotification !== null) {\n                addEventListener(START_EVENT_NAME, this.getStartNotification);\n            }\n            if (this.getFileCommitNotification !== null) {\n                addEventListener(FILE_COMMIT_EVENT_NAME, this.getFileCommitNotification);\n            }\n            if (this.getFileCommitRetryNotification !== null) {\n                addEventListener(FILE_COMMIT_RETRY_EVENT_NAME, this.getFileCommitRetryNotification);\n            }\n            if (this.getCompletedNotification !== null) {\n                addEventListener(COMPLETED_EVENT_NAME, this.getCompletedNotification);\n            }\n            if (this.getIsCancellingNotification !== null) {\n                addEventListener(START_CANCELLING_EVENT_NAME, this.getIsCancellingNotification);\n            }\n            if (this.getIsCancelledNotification !== null) {\n                addEventListener(END_CANCELLING_EVENT_NAME, this.getIsCancelledNotification);\n            }\n            if (this.handleProgressUpdates !== null) {\n                addEventListener(PROGRESS_EVENT_NAME, this.handleProgressUpdates);\n            }\n        }\n    }, {\n        key: 'removeListeners',\n        value: function removeListeners() {\n            if (this.getFailureNotification !== null) {\n                removeEventListener(FAILURE_EVENT_NAME, this.getFailureNotification);\n            }\n            if (this.getSuccessNotification !== null) {\n                removeEventListener(SUCCESS_EVENT_NAME, this.getSuccessNotification);\n            }\n            if (this.getStartNotification !== null) {\n                removeEventListener(START_EVENT_NAME, this.getStartNotification);\n            }\n            if (this.getFileCommitNotification !== null) {\n                removeEventListener(FILE_COMMIT_EVENT_NAME, this.getFileCommitNotification);\n            }\n            if (this.getFileCommitRetryNotification !== null) {\n                removeEventListener(FILE_COMMIT_RETRY_EVENT_NAME, this.getFileCommitRetryNotification);\n            }\n            if (this.getCompletedNotification !== null) {\n                removeEventListener(COMPLETED_EVENT_NAME, this.getCompletedNotification);\n            }\n            if (this.handleProgressUpdates !== null) {\n                removeEventListener(PROGRESS_EVENT_NAME, this.handleProgressUpdates);\n            }\n            if (this.getIsCancellingNotification !== null) {\n                removeEventListener(START_CANCELLING_EVENT_NAME, this.getCompletedNotification);\n            }\n            if (this.getIsCancelledNotification !== null) {\n                removeEventListener(END_CANCELLING_EVENT_NAME, this.getCompletedNotification);\n            }\n            removeEventListener(ABORT_UPLOAD_EVENT_NAME, this.abortUpload);\n        }\n    }, {\n        key: 'fireEvent',\n        value: function fireEvent(progress, eventName) {\n            var event = new CustomEvent(eventName, {\n                detail: {\n                    progress: progress\n                },\n                bubbles: true,\n                cancelable: true\n            });\n            dispatchEvent(event);\n        }\n    }, {\n        key: 'startSession',\n        value: function startSession() {\n            this.addListeners();\n            this.progress.didStart = true;\n            if (this.getStartNotification !== null) {\n                this.fireEvent(this.progress, START_EVENT_NAME);\n            }\n            var options = {};\n            var self = this;\n            options.method = _boxConstants2.default.HTTP_VERBS.POST;\n            if (self.newVersionFileId) {\n                options.url = this.filesManager.UPLOAD_PATH + '/files/' + self.newVersionFileId + '/upload_sessions';\n                options.body = {\n                    file_size: this.file.size,\n                    file_name: this.fileName\n                };\n            } else {\n                options.url = this.filesManager.UPLOAD_PATH + '/files/upload_sessions';\n                options.body = {\n                    folder_id: this.parentFolder.id,\n                    file_size: this.file.size,\n                    file_name: this.fileName\n                };\n            }\n\n            if (!this.client.httpService.defaults) {\n                options.useXHR = true;\n            }\n            return this.client.makeRequest(null, options).then(function (resp) {\n                if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                if (resp.data) {\n                    resp = resp.data;\n                }\n                self.session.id = resp.id;\n                self.session.expiresAt = resp.session_expires_at;\n                self.session.partSize = resp.part_size;\n                self.session.totalParts = resp.total_parts;\n                self.session.endpoints.listParts = resp.session_endpoints.list_parts;\n                self.session.endpoints.commit = resp.session_endpoints.commit;\n                self.session.endpoints.uploadPart = resp.session_endpoints.upload_part;\n                self.session.endpoints.status = resp.session_endpoints.status;\n                self.session.endpoints.abort = resp.session_endpoints.abort;\n                self.progress.session = self.session;\n\n                self.makeChunks();\n                return self.processChunks();\n            }).then(function (tasks) {\n                if (self.isCancelled) return;\n                return self.commitUpload();\n            }).then(function (result) {\n                if (self.isCancelled) return;\n                if (self.getFileCommitNotification !== null) {\n                    self.progress.didFileCommit = true;\n                    self.fireEvent(self.progress, FILE_COMMIT_EVENT_NAME);\n                }\n                if (self.getCompletedNotification !== null) {\n                    self.progress.didSucceed = true;\n                    self.progress.isComplete = true;\n                    self.fireEvent(self.progress, COMPLETED_EVENT_NAME);\n                }\n                if (self.getSuccessNotification !== null) {\n                    self.progress.didSucceed = true;\n                    self.progress.isComplete = true;\n                    self.fireEvent(self.progress, SUCCESS_EVENT_NAME);\n                }\n                self.removeListeners();\n                self.session = {};\n                return result;\n            }).catch(function (err) {\n                if (self.getCompletedNotification !== null) {\n                    if (err.message !== \"Upload cancelled\") {\n                        self.progress.didFail = true;\n                        self.progress.isCancelled = true;\n                    }\n                    self.progress.isComplete = true;\n                    self.fireEvent(self.progress, COMPLETED_EVENT_NAME);\n                }\n                if (self.getFailureNotification !== null) {\n                    self.fireEvent(self.progress, FAILURE_EVENT_NAME);\n                }\n                if (!self.isCancelled) {\n                    if (typeof self.abortUpload == \"function\") {\n                        self.abortUpload();\n                    } else {\n                        throw err;\n                    }\n                }\n                throw err;\n            });\n        }\n    }, {\n        key: 'makeChunks',\n        value: function makeChunks() {\n            var self = this;\n            if (self.isCancelled) throw new Error(\"Upload cancelled\");\n            var totalSize = this.file.size;\n            var position = 0;\n            var part = void 0;\n            while (position < totalSize) {\n                if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                var contentRangeLow = position;\n                var contentRangeHigh = position + self.session.partSize - 1;\n                if (contentRangeHigh > totalSize - 1) {\n                    contentRangeHigh = totalSize - 1;\n                }\n                part = self.file.slice(position, position + self.session.partSize);\n                self.parts.push({\n                    part: part,\n                    contentRange: 'bytes ' + position + '-' + contentRangeHigh + '/' + self.file.size,\n                    digest: \"\",\n                    uploaded: false,\n                    retry: 0\n                });\n                position += self.session.partSize;\n            }\n        }\n    }, {\n        key: 'processChunk',\n        value: function processChunk(part) {\n            var self = this;\n            if (self.isCancelled) throw new Error(\"Upload cancelled\");\n            if (!part.uploaded) {\n                part.retry++;\n                var blob = part.part;\n                return self.filesManager.createSHA1Hash(blob).then(function (shaObject) {\n                    if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                    self.processedCount++;\n                    if (self.handleProgressUpdates !== null) {\n                        self.progress.percentageProcessed = (self.processedCount / self.session.totalParts).toFixed(2);\n                        self.fireEvent(self.progress, PROGRESS_EVENT_NAME);\n                    }\n                    part.digest = shaObject.hash;\n                    self.hash.update(shaObject.arrayBuffer);\n                    var options = {};\n                    options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n                    options.url = self.session.endpoints.uploadPart;\n                    options.headers = {\n                        \"Digest\": 'sha=' + shaObject.hash,\n                        \"Content-Range\": part.contentRange,\n                        \"Content-Type\": \"application/octet-stream\"\n                    };\n                    options.body = part.part;\n                    options.chunkedUpload = true;\n                    options.returnsOnlyOptions = true;\n                    if (!self.client.makeRequest(null, options).then) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                resolve(self.client.makeRequest(null, options));\n                            } catch (e) {\n                                reject(e);\n                            }\n                        });\n                    } else {\n                        return self.client.makeRequest(null, options);\n                    }\n                }).then(function (opts) {\n                    opts.includeFullResponse = true;\n                    if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                    if (self.filesManager.client.httpService.defaults && self.filesManager.client.Promise.defer) {\n                        var canceller = self.filesManager.client.Promise.defer();\n                        var cancel = function cancel(reason) {\n                            canceller.resolve(reason);\n                        };\n                        self.partRequestCancellations.push({ abort: cancel });\n                        return self.filesManager.client.httpService.put(opts.url, opts.body, {\n                            headers: opts.headers,\n                            timeout: canceller.promise\n                        });\n                    } else {\n                        opts.useXHR = true;\n                        opts.returnCancelToken = true;\n                        var request = self.filesManager.client.httpService(opts);\n                        self.partRequestCancellations.push({ abort: request.abort });\n                        return request.promise;\n                    }\n                }).catch(function (e) {\n                    if (e && e.status && e.status !== 416 && !self.isCancelled) {\n                        if (part.retry < 2) {\n                            return self.processChunk(part);\n                        }\n                    } else {\n                        throw e;\n                    }\n                }).then(function (resp) {\n                    if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                    self.uploadCount++;\n                    if (self.handleProgressUpdates !== null) {\n                        self.progress.percentageUploaded = (self.uploadCount / self.session.totalParts).toFixed(2);\n                        self.fireEvent(self.progress, PROGRESS_EVENT_NAME);\n                    }\n                    if (resp.data) {\n                        resp = resp.data;\n                    }\n                    part.response = resp;\n                    part.uploaded = true;\n                });\n            } else {\n                return new Promise.resolve();\n            }\n        }\n    }, {\n        key: 'processChunks',\n        value: function processChunks() {\n            var self = this;\n            if (self.isCancelled) throw new Error(\"Upload cancelled\");\n            this.parts.forEach(function (part) {\n                if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                self.tasks.push(self.processChunk(part));\n            });\n            return Promise.all(self.tasks);\n        }\n    }, {\n        key: 'commitUpload',\n        value: function commitUpload(calculatedHash, preorderedParts) {\n            var _this = this;\n\n            return new Promise(function (resolve, reject) {\n                var self = _this;\n\n                if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                var orderedParts = [];\n                var hash = '';\n                if (calculatedHash) {\n                    hash = calculatedHash;\n                } else {\n                    var digest = self.hash.digest();\n                    hash = (0, _base64ArrayBuffer2.default)(digest);\n                }\n                if (preorderedParts) {\n                    orderedParts = preorderedParts;\n                } else {\n                    self.finishedUploading = true;\n                    _this.parts.forEach(function (part) {\n                        if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                        if (part.uploaded === false) {\n                            self.finishedUploading = false;\n                            self.abortUpload();\n                        }\n                    });\n                    self.parts.forEach(function (part) {\n                        if (!part || !part.response || !part.response.part) {\n                            self.abortUpload();\n                        }\n                        orderedParts.push(part.response.part);\n                    });\n                }\n                var options = {};\n                options.chunkedUpload = true;\n                options.method = _boxConstants2.default.HTTP_VERBS.POST;\n                options.url = self.session.endpoints.commit;\n                options.headers = {\n                    \"Digest\": 'sha=' + hash\n                };\n                options.body = JSON.stringify({\n                    parts: orderedParts\n                });\n                options.includeFullResponse = true;\n                options.useXHR = true;\n                return self.client.makeRequest(null, options).then(function (resp) {\n                    if (resp.status && resp.status == 202) {\n                        if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                        var retrySeconds = void 0;\n                        if (resp && resp.headers && typeof resp.headers === \"function\") {\n                            retrySeconds = resp.headers()[\"retry-after\"];\n                        } else if (resp && resp.headers && resp.headers[\"retry-after\"]) {\n                            retrySeconds = resp.headers[\"retry-after\"];\n                        } else {\n                            retrySeconds = 30;\n                        }\n                        retrySeconds *= 1000;\n                        return new Promise(function (resolve, reject) {\n                            self.delay(retrySeconds).then(function () {\n                                return resolve(self.commitUpload(hash, orderedParts));\n                            });\n                        });\n                    } else {\n                        return Promise.resolve(resp);\n                    }\n                }).then(function (resp) {\n                    return resolve(resp);\n                });\n            });\n        }\n    }, {\n        key: 'delay',\n        value: function delay(t) {\n            var self = this;\n            if (self.getFileCommitRetryNotification !== null) {\n                self.progress.fileCommitRetryTime = t / 1000;\n                self.fireEvent(self.progress, FILE_COMMIT_RETRY_EVENT_NAME);\n            }\n            return new Promise(function (resolve) {\n                self.retryCommitTimer = setTimeout(resolve, t);\n            });\n        }\n    }]);\n\n    return ChunkedUploader;\n}();\n\nexports.default = ChunkedUploader;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _rusha = __webpack_require__(5);\n\nvar _rusha2 = _interopRequireDefault(_rusha);\n\nvar _base64ArrayBuffer = __webpack_require__(9);\n\nvar _base64ArrayBuffer2 = _interopRequireDefault(_base64ArrayBuffer);\n\nvar _checkForFileReader = __webpack_require__(10);\n\nvar _checkForFileReader2 = _interopRequireDefault(_checkForFileReader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (blob) {\n    return new Promise(function (resolve, reject) {\n        if (!(0, _checkForFileReader2.default)()) reject(new Error(\"FileReader isn't usable in this browser.\"));\n        try {\n            var reader = new FileReader();\n            reader.onload = function (evt) {\n                if (!evt || !evt.target || !evt.target.result) {\n                    reject();\n                    return;\n                }\n                var rusha = new _rusha2.default();\n                resolve({\n                    hash: (0, _base64ArrayBuffer2.default)(rusha.rawDigest(evt.target.result).buffer),\n                    arrayBuffer: evt.target.result\n                });\n            };\n            reader.readAsArrayBuffer(blob);\n        } catch (e) {\n            reject(e);\n        }\n    });\n}; // 'use strict';\n\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _rusha = __webpack_require__(5);\n\nvar _rusha2 = _interopRequireDefault(_rusha);\n\nvar _checkForFileReader = __webpack_require__(10);\n\nvar _checkForFileReader2 = _interopRequireDefault(_checkForFileReader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// 'use strict';\nexports.default = function (blob) {\n    return new Promise(function (resolve, reject) {\n        if (!(0, _checkForFileReader2.default)()) reject(new Error(\"FileReader isn't usable in this browser.\"));\n        try {\n            var reader = new FileReader();\n            reader.onload = function (evt) {\n                if (!evt || !evt.target || !evt.target.result) {\n                    reject();\n                    return;\n                }\n                var rusha = new _rusha2.default();\n                resolve(rusha.digestFromBuffer(evt.target.result));\n            };\n            reader.readAsArrayBuffer(blob);\n        } catch (e) {\n            reject(e);\n        }\n    });\n};\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function () {\n  return window && window.FormData || FormData ? true : false;\n};\n\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _createRequestBody = __webpack_require__(4);\n\nvar _createRequestBody2 = _interopRequireDefault(_createRequestBody);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/web_links';\nvar MODEL_VALUES = {\n  URL: 'url',\n  PARENT: 'parent',\n  ID: 'parent.id',\n  NAME: 'name',\n  DESCRIPTION: 'description'\n};\n\nvar WebLinks = function (_Manager) {\n  _inherits(WebLinks, _Manager);\n\n  function WebLinks(client) {\n    _classCallCheck(this, WebLinks);\n\n    var _this = _possibleConstructorReturn(this, (WebLinks.__proto__ || Object.getPrototypeOf(WebLinks)).call(this, MODEL_VALUES));\n\n    _this.client = client;\n    return _this;\n  }\n\n  _createClass(WebLinks, [{\n    key: '_getWebLinkId',\n    value: function _getWebLinkId(options) {\n      var id = _get(WebLinks.prototype.__proto__ || Object.getPrototypeOf(WebLinks.prototype), '_getId', this).call(this, options);\n\n      if (options.webLink) {\n        options.web_link = options.webLink;\n        delete options.webLink;\n      }\n\n      if (options.web_link && options.web_link.id) {\n        id = options.web_link.id;\n      } else if (options.webLinkId || options.web_link_id) {\n        id = options.webLinkId || options.web_link_id;\n        options.webLinkId ? delete options.webLinkId : delete options.web_link_id;\n      }\n      _get(WebLinks.prototype.__proto__ || Object.getPrototypeOf(WebLinks.prototype), '_testForMissingId', this).call(this, id);\n      return id;\n    }\n  }, {\n    key: '_getWebLink',\n    value: function _getWebLink(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n\n      if (options.webLink) {\n        options.web_link = options.webLink;\n        delete options.webLink;\n      }\n\n      if (options.web_link) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.webLink, values);\n        };\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.webLink, this.FLATTENED_VALUES);\n        };\n        options.body = (0, _createRequestBody2.default)(options.webLink, this.ALL_VALUES);\n        delete options.web_link;\n      } else {\n        _get(WebLinks.prototype.__proto__ || Object.getPrototypeOf(WebLinks.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(WebLinks.prototype.__proto__ || Object.getPrototypeOf(WebLinks.prototype), '_objectifyString', this).call(this, options) || {};\n      var webLinkId = this._getWebLinkId(options);\n      var apiPath = BASE_PATH + '/' + webLinkId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'create',\n    value: function create(options) {\n      options = options || {};\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [ALL_VALUES.URL, ALL_VALUES.PARENT, ALL_VALUES.ID];\n        var skipValidation = InvestigateModes(options, _boxConstants2.default.MODES.SKIP_VALIDATION) || false;\n        var ignoreModelValues = InvestigateModes(options, _boxConstants2.default.MODES.IGNORE_MODEL_VALUES) || false;\n\n        if (!this.client._returnsOnlyOptions) {\n          this._getWebLink(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n        }\n      }\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'update',\n    value: function update(options) {\n      options = options || {};\n      var webLinkId = this._getWebLinkId(options);\n      if (!this.client._simpleMode) {\n        var skipValidation = InvestigateModes(options, _boxConstants2.default.MODES.SKIP_VALIDATION) || false;\n        var ignoreModelValues = InvestigateModes(options, _boxConstants2.default.MODES.IGNORE_MODEL_VALUES) || false;\n\n        this._getWebLink(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + webLinkId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(options) {\n      options = options || {};\n      var webLinkId = this._getWebLinkId(options);\n      var apiPath = BASE_PATH + '/' + webLinkId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return WebLinks;\n}(_manager2.default);\n\nexports.default = WebLinks;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/collaborations';\nvar MODEL_VALUES = {\n  NOTIFY: 'notify',\n  ITEM: 'item',\n  ITEM_TYPE: 'item.type',\n  ITEM_ID: 'item.id',\n  ACCESSIBLE_BY: 'accessible_by',\n  ACCESSIBLE_BY_ID: 'accessible_by.id',\n  ACCESSIBLE_BY_TYPE: 'accessible_by.type',\n  ACCESSIBLE_BY_LOGIN: 'accessible_by.login',\n  ROLE: 'role'\n};\n\nvar Collaborations = function (_Manager) {\n  _inherits(Collaborations, _Manager);\n\n  function Collaborations(client) {\n    _classCallCheck(this, Collaborations);\n\n    return _possibleConstructorReturn(this, (Collaborations.__proto__ || Object.getPrototypeOf(Collaborations)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Collaborations, [{\n    key: '_getCollaborationId',\n    value: function _getCollaborationId(options) {\n      var id = _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_getId', this).call(this, options);\n      if (options.collaborationId || options.collaboration_id) {\n        id = options.collaborationId || options.collaboration_id;\n        options.collaborationId ? delete options.collaborationId : delete options.collaboration_id;\n      } else if (options.collaboration && options.collaboration.id) {\n        id = options.collaboration.id;\n      }\n      _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_testForMissingId', this).call(this, id);\n      return id;\n    }\n  }, {\n    key: '_getCollaboration',\n    value: function _getCollaboration(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n      if (options.collaboration) {\n        if (!skipValidation) {\n          _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), 'VerifyRequiredValues', this).call(this, options.collaboration, values);\n        };\n        if (!ignoreModelValues) {\n          _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), 'NormalizeObjectKeys', this).call(this, options.collaboration, this.FLATTENED_VALUES);\n        }\n        options.body = _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), 'CreateRequestBody', this).call(this, options.comment, this.ALL_VALUES, ignoreModelValues);\n        delete options.collaboration;\n      } else {\n        _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_objectifyString', this).call(this, options) || {};\n      var collaborationId = this._getCollaborationId(options);\n      var apiPath = BASE_PATH + '/' + collaborationId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'create',\n    value: function create(options) {\n      options = options || {};\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [MODEL_VALUES.ITEM, MODEL_VALUES.ITEM_ID, MODEL_VALUES.ITEM_TYPE, MODEL_VALUES.ACCESSIBLE_BY, MODEL_VALUES.ROLE];\n        var skipValidation = _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getCollaboration(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'update',\n    value: function update(options) {\n      options = options || {};\n      var collaborationId = this._getCollaborationId(options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Collaborations.prototype.__proto__ || Object.getPrototypeOf(Collaborations.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getCollaboration(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + collaborationId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(options) {\n      options = options || {};\n      var collaborationId = this._getCollaborationId(options);\n      var apiPath = BASE_PATH + '/' + collaborationId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Collaborations;\n}(_manager2.default);\n\nexports.default = Collaborations;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/collections';\nvar MODEL_VALUES = {};\n\nvar Collections = function (_Manager) {\n  _inherits(Collections, _Manager);\n\n  function Collections(client) {\n    _classCallCheck(this, Collections);\n\n    return _possibleConstructorReturn(this, (Collections.__proto__ || Object.getPrototypeOf(Collections)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Collections, [{\n    key: '_getCollectionId',\n    value: function _getCollectionId(options) {\n      var id = _get(Collections.prototype.__proto__ || Object.getPrototypeOf(Collections.prototype), '_getId', this).call(this, options);\n      if (options.collectionId || options.collection_id) {\n        id = options.collectionId || options.collection_id;\n        options.collectionId ? delete options.collectionId : delete options.collection_id;\n      } else if (options.collection && options.collection.id) {\n        id = options.collection.id;\n      }\n      _get(Collections.prototype.__proto__ || Object.getPrototypeOf(Collections.prototype), '_testForMissingId', this).call(this, id);\n      return id;\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(Collections.prototype.__proto__ || Object.getPrototypeOf(Collections.prototype), '_objectifyString', this).call(this, options) || {};\n      var collectionId = this._getCollectionId(options);\n      var apiPath = BASE_PATH + '/' + collectionId + '/items';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getAll',\n    value: function getAll(options) {\n      options = options || {};\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Collections;\n}(_manager2.default);\n\nexports.default = Collections;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/comments';\nvar MODEL_VALUES = {\n  ITEM: 'item',\n  ITEM_TYPE: 'item.type',\n  ITEM_ID: 'item.id',\n  TAGGED_MESSAGE: 'tagged_message',\n  MESSAGE: 'message'\n};\n\nvar Comments = function (_Manager) {\n  _inherits(Comments, _Manager);\n\n  function Comments(client) {\n    _classCallCheck(this, Comments);\n\n    return _possibleConstructorReturn(this, (Comments.__proto__ || Object.getPrototypeOf(Comments)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Comments, [{\n    key: '_getCommentId',\n    value: function _getCommentId(options) {\n      var id = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_getId', this).call(this, options);\n      if (options.commentId || options.comment_id) {\n        id = options.commentId || options.comment_id;\n        options.commentId ? delete options.commentId : delete options.comment_id;\n      } else if (options.comment && options.comment.id) {\n        id = options.comment.id;\n      }\n      _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_testForMissingId', this).call(this, id, _boxConstants2.default.COMMENT, _boxConstants2.default.COMMENT_ID);\n      return id;\n    }\n  }, {\n    key: '_getComment',\n    value: function _getComment(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n      if (options.comment) {\n        if (!skipValidation) {\n          _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'VerifyRequiredValues', this).call(this, options.comment, values);\n        };\n        if (!ignoreModelValues) {\n          _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'NormalizeObjectKeys', this).call(this, options.comment, this.FLATTENED_VALUES);\n        }\n        options.body = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'CreateRequestBody', this).call(this, options.comment, this.ALL_VALUES, ignoreModelValues);\n        delete options.comment;\n      } else {\n        _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_objectifyString', this).call(this, options) || {};\n      var commentId = this._getCommentId(options);\n      var apiPath = BASE_PATH + '/' + commentId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'create',\n    value: function create(options) {\n      options = options || {};\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [MODEL_VALUES.ITEM, MODEL_VALUES.ITEM_ID, MODEL_VALUES.ITEM_TYPE, MODEL_VALUES.MESSAGE];\n        var skipValidation = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getComment(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'update',\n    value: function update(options) {\n      options = options || {};\n      var commentId = this._getCommentId(options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getComment(options, [MODEL_VALUES.MESSAGE], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + commentId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(options) {\n      options = _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), '_objectifyString', this).call(this, options) || {};\n      var commentId = this._getCommentId(options);\n      var apiPath = BASE_PATH + '/' + commentId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Comments;\n}(_manager2.default);\n\nexports.default = Comments;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/groups';\nvar BASE_MEMBERSHIP_PATH = '/group_memberships';\nvar MODEL_VALUES = {\n  NAME: 'name',\n  PROVENANCE: 'provenance',\n  EXTERNAL_SYNC_IDENTIFIER: 'external_sync_identifier',\n  DESCRIPTION: 'description',\n  INVITABILITY_LEVEL: 'invitability_level',\n  MEMBER_VIEWABILITY_LEVEL: 'member_viewability_level',\n  USER: 'user',\n  USER_ID: 'user.id',\n  GROUP: 'group',\n  GROUP_ID: 'group.id',\n  ROLE: 'role'\n};\n\nvar Groups = function (_Manager) {\n  _inherits(Groups, _Manager);\n\n  function Groups(client) {\n    _classCallCheck(this, Groups);\n\n    return _possibleConstructorReturn(this, (Groups.__proto__ || Object.getPrototypeOf(Groups)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Groups, [{\n    key: '_getGroupId',\n    value: function _getGroupId(options) {\n      var id = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_getId', this).call(this, options);\n      if (options.groupId || options.group_id) {\n        id = options.groupId || options.group_id;\n        options.groupId ? delete options.groupId : delete options.group_id;\n      } else if (options.group && options.group.id) {\n        id = options.group.id;\n      }\n      _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_testForMissingId', this).call(this, id);\n      return id;\n    }\n  }, {\n    key: '_getGroupMembershipId',\n    value: function _getGroupMembershipId(options) {\n      var id = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_getId', this).call(this, options);\n      if (options.groupMembershipId || options.group_membership_id) {\n        id = options.groupMembershipId || options.group_membership_id;\n        options.groupMembershipId ? delete options.groupMembershipId : delete options.group_membership_id;\n      } else if (options.groupMembership && options.groupMembership.id || options.group_membership && options.group_membership.id) {\n        id = options.groupMembership.id || options.group_membership.id;\n      }\n      _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_testForMissingId', this).call(this, id);\n      return id;\n    }\n  }, {\n    key: '_getGroup',\n    value: function _getGroup(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n      if (options.group) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.group, values);\n        };\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.group, this.FLATTENED_VALUES);\n        }\n        options.body = CreateRequestBody(options.group, this.ALL_VALUES, ignoreModelValues);\n        delete options.group;\n      } else {\n        _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: '_getGroupMembership',\n    value: function _getGroupMembership(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n\n      if (options.groupMembership) {\n        options.group_membership = options.groupMembership;\n        delete options.groupMembership;\n      }\n\n      if (options.group_membership) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.group_membership, values);\n        }\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.group_membership, this.FLATTENED_VALUES);\n        }\n        options.body = CreateRequestBody(options.group_membership, this.ALL_VALUES, ignoreModelValues);\n        delete options.group_membership;\n      } else {\n        _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_objectifyString', this).call(this, options) || {};\n      var groupId = this._getGroupId(options);\n      var apiPath = BASE_PATH + '/' + groupId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getAll',\n    value: function getAll(options) {\n      options = options || {};\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'update',\n    value: function update(options) {\n      options = options || {};\n      var groupId = this._getGroupId(options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getGroup(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + groupId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getMembership',\n    value: function getMembership(options) {\n      options = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_objectifyString', this).call(this, options) || {};\n      var groupMembershipId = this._getGroupMembershipId(options);\n      var apiPath = BASE_MEMBERSHIP_PATH + '/' + groupMembershipId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'updateMembership',\n    value: function updateMembership(options) {\n      options = options || {};\n      var groupMembershipId = this._getGroupMembershipId(options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Groups.prototype.__proto__ || Object.getPrototypeOf(Groups.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getGroupMembership(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_MEMBERSHIP_PATH + '/' + groupMembershipId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'deleteMembership',\n    value: function deleteMembership(options) {\n      options = options || {};\n      var groupMembershipId = this._getGroupMembershipId(options);\n      var apiPath = BASE_MEMBERSHIP_PATH + '/' + groupMembershipId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getMembershipsForGroup',\n    value: function getMembershipsForGroup(options) {\n      options = options || {};\n      var groupId = this._getGroupId(options);\n      var apiPath = BASE_PATH + '/' + groupId + '/memberships';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getCollaborationsForGroup',\n    value: function getCollaborationsForGroup(options) {\n      options = options || {};\n      var groupId = this._getGroupId(options);\n      var apiPath = BASE_PATH + '/' + groupId + '/collaborations';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Groups;\n}(_manager2.default);\n\nexports.default = Groups;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _createRequestBody = __webpack_require__(4);\n\nvar _createRequestBody2 = _interopRequireDefault(_createRequestBody);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/metadata_templates';\nvar BASE_PATH_FOLDER_METADATA = '/folders';\nvar BASE_PATH_FILE_METADATA = '/files';\nvar MODEL_VALUES = {};\n\nvar Metadata = function (_Manager) {\n  _inherits(Metadata, _Manager);\n\n  function Metadata(client) {\n    _classCallCheck(this, Metadata);\n\n    return _possibleConstructorReturn(this, (Metadata.__proto__ || Object.getPrototypeOf(Metadata)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Metadata, [{\n    key: 'get',\n    value: function get(options) {\n      options = options || {};\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + scope + '/' + templateKey + '/schema';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getTemplates',\n    value: function getTemplates(options) {\n      options = options || {};\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var apiPath = BASE_PATH + '/' + scope;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getFolderMetadata',\n    value: function getFolderMetadata(options) {\n      options = options || {};\n      var folderId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFolderId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FOLDER_METADATA + '/' + folderId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getAllFolderMetadata',\n    value: function getAllFolderMetadata(options) {\n      options = options || {};\n      var folderId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFolderId', this).call(this, options);\n\n      var apiPath = BASE_PATH_FOLDER_METADATA + '/' + folderId + '/metadata';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getFileMetadata',\n    value: function getFileMetadata(options) {\n      options = options || {};\n      var fileId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFileId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FILE_METADATA + '/' + fileId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getAllFileMetadata',\n    value: function getAllFileMetadata(options) {\n      options = options || {};\n      var fileId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFileId', this).call(this, options);\n\n      var apiPath = BASE_PATH_FILE_METADATA + '/' + fileId + '/metadata';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'createFolderMetadata',\n    value: function createFolderMetadata(options) {\n      options = options || {};\n      var folderId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFolderId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FOLDER_METADATA + '/' + folderId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      options.headers = options.headers || {};\n      options.headers['Content-Type'] = \"application/json\";\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'createFileMetadata',\n    value: function createFileMetadata(options) {\n      options = options || {};\n      var fileId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFileId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FILE_METADATA + '/' + fileId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      options.headers = options.headers || {};\n      options.headers['Content-Type'] = \"application/json\";\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'updateFileMetadata',\n    value: function updateFileMetadata(options) {\n      options = options || {};\n      var fileId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFileId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FILE_METADATA + '/' + fileId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      options.headers = options.headers || {};\n      options.headers['Content-Type'] = \"application/json-patch+json\";\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'updateFolderMetadata',\n    value: function updateFolderMetadata(options) {\n      options = options || {};\n      var folderId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFolderId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FOLDER_METADATA + '/' + folderId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      options.headers = options.headers || {};\n      options.headers['Content-Type'] = \"application/json-patch+json\";\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'deleteFolderMetadata',\n    value: function deleteFolderMetadata(options) {\n      options = options || {};\n      var folderId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFolderId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FOLDER_METADATA + '/' + folderId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'deleteFileMetadata',\n    value: function deleteFileMetadata(options) {\n      options = options || {};\n      var fileId = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getFileId', this).call(this, options);\n      var scope = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getScope', this).call(this, options);\n      var templateKey = _get(Metadata.prototype.__proto__ || Object.getPrototypeOf(Metadata.prototype), '_getTemplateKey', this).call(this, options);\n\n      var apiPath = BASE_PATH_FILE_METADATA + '/' + fileId + '/metadata/' + scope + '/' + templateKey;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Metadata;\n}(_manager2.default);\n\nexports.default = Metadata;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/search';\nvar MODEL_VALUES = {};\n\nvar Search = function (_Manager) {\n  _inherits(Search, _Manager);\n\n  function Search(client) {\n    _classCallCheck(this, Search);\n\n    return _possibleConstructorReturn(this, (Search.__proto__ || Object.getPrototypeOf(Search)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Search, [{\n    key: '_objectifyStringWithQuery',\n    value: function _objectifyStringWithQuery(options) {\n      if (typeof options === 'string') {\n        var query = options;\n        options = { query: query };\n      }\n      return options;\n    }\n  }, {\n    key: '_getQuery',\n    value: function _getQuery(options) {\n      var queryFormat = 'query';\n      var query = '';\n      if (options.query || options.params.query) {\n        options.params = options.params || {};\n        query = options.query || options.params.query;\n        if (options.query) {\n          delete options.query;\n        }\n        options.params.query = query;\n      } else {\n        throw new Error('An ' + queryFormat + ' field is required for this API call. Please provide an object with a key formatted in this style: ' + queryFormat);\n      }\n      return options;\n    }\n  }, {\n    key: 'search',\n    value: function search(options) {\n      options = this._objectifyStringWithQuery(options) || {};\n      options = this._getQuery(options);\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Search;\n}(_manager2.default);\n\nexports.default = Search;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _createRequestBody = __webpack_require__(4);\n\nvar _createRequestBody2 = _interopRequireDefault(_createRequestBody);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/tasks';\nvar BASE_TASK_ASSIGNMENT_PATH = '/task_assignments';\nvar MODEL_VALUES = {\n  TASK: 'task',\n  TASK_TYPE: 'task.type',\n  TASK_ID: 'task.id',\n  ASSIGN_TO: 'assign_to',\n  ASSIGN_TO_ID: 'assign_to.id',\n  ASSIGN_TO_LOGIN: 'assign_to.login',\n  RESOLUTION_STATE: 'resolution_state',\n  ITEM: 'item',\n  ITEM_TYPE: 'item.type',\n  ITEM_ID: 'item.id',\n  ACTION: 'action',\n  MESSAGE: 'message',\n  DUE_AT: 'due_at'\n};\n\nvar Tasks = function (_Manager) {\n  _inherits(Tasks, _Manager);\n\n  function Tasks(client) {\n    _classCallCheck(this, Tasks);\n\n    var _this = _possibleConstructorReturn(this, (Tasks.__proto__ || Object.getPrototypeOf(Tasks)).call(this, MODEL_VALUES));\n\n    _this.client = client;\n    return _this;\n  }\n\n  _createClass(Tasks, [{\n    key: '_getTaskId',\n    value: function _getTaskId(options) {\n      var id = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_getId', this).call(this, options);\n      if (options.taskId || options.task_id) {\n        id = options.taskId || options.task_id;\n        options.taskId ? delete options.taskId : delete options.task_id;\n      } else if (options.task && options.task.id) {\n        id = options.task.id;\n      }\n      _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_testForMissingId', this).call(this, id);\n      return id;\n    }\n  }, {\n    key: '_getTaskAssignmentId',\n    value: function _getTaskAssignmentId(options) {\n      var id = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_getId', this).call(this, options);\n\n      if (options.taskAssignment) {\n        options.task_assignment = options.taskAssignment;\n        delete options.taskAssignment;\n      }\n\n      if (options.taskAssignmentId || options.task_assignment_id) {\n        id = options.taskId || options.task_id;\n        options.taskId ? delete options.taskId : delete options.task_id;\n      } else if (options.task_assignment && options.task_assignment.id) {\n        id = options.task_assignment.id;\n      }\n      _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_testForMissingId', this).call(this, id);\n      return id;\n    }\n  }, {\n    key: '_getTask',\n    value: function _getTask(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n      if (options.task) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.task, values);\n        };\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.task, this.FLATTENED_VALUES);\n        }\n        options.body = (0, _createRequestBody2.default)(options.task, this.ALL_VALUES, ignoreModelValues);\n        delete options.task;\n      } else {\n        _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: '_getTaskAssignment',\n    value: function _getTaskAssignment(options, values, skipValidation, ignoreModelValues) {\n      skipValidation = skipValidation || this.client.skipValidation || false;\n      ignoreModelValues = ignoreModelValues || false;\n\n      if (options.taskAssignment) {\n        options.task_assignment = options.taskAssignment;\n        delete options.taskAssignment;\n      }\n\n      if (options.task_assignment) {\n        if (!skipValidation) {\n          (0, _verifyRequiredValues2.default)(options.task_assignment, values);\n        }\n        if (!ignoreModelValues) {\n          (0, _normalizeObjectKeys2.default)(options.task_assignment, this.FLATTENED_VALUES);\n        }\n        options.body = (0, _createRequestBody2.default)(options.task_assignment, this.ALL_VALUES, ignoreModelValues);\n        delete options.task_assignment;\n      } else {\n        _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_getModel', this).call(this, options, values, skipValidation, ignoreModelValues);\n      }\n    }\n  }, {\n    key: 'get',\n    value: function get(options) {\n      options = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_objectifyString', this).call(this, options) || {};\n      var taskId = this._getTaskId(options);\n      var apiPath = BASE_PATH + '/' + taskId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'create',\n    value: function create(options) {\n      options = options || {};\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [MODEL_VALUES.ITEM, MODEL_VALUES.ITEM_ID, MODEL_VALUES.ITEM_TYPE];\n        var skipValidation = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getTask(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n      var apiPath = '' + BASE_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'update',\n    value: function update(options) {\n      options = options || {};\n      var taskId = this._getTaskId(options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getTask(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_PATH + '/' + taskId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(options) {\n      options = options || {};\n      var taskId = this._getTaskId(options);\n      var apiPath = BASE_PATH + '/' + taskId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getTaskAssignment',\n    value: function getTaskAssignment(options) {\n      options = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_objectifyString', this).call(this, options) || {};\n      var taskAssignmentId = this._getTaskAssignmentId(options);\n      var apiPath = BASE_TASK_ASSIGNMENT_PATH + '/' + taskAssignmentId;\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getTaskAssignments',\n    value: function getTaskAssignments(options) {\n      options = options || {};\n      var taskId = this._getTaskId(options);\n      var apiPath = BASE_PATH + '/' + taskId + '/assignments';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'createTaskAssignment',\n    value: function createTaskAssignment(options) {\n      options = options || {};\n      if (!this.client._simpleMode) {\n        var REQUIRED_VALUES = [MODEL_VALUES.TASK, MODEL_VALUES.TASK_TYPE, MODEL_VALUES.TASK_ID, MODEL_VALUES.ASSIGN_TO];\n        var skipValidation = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getTaskAssignment(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n      var apiPath = '' + BASE_TASK_ASSIGNMENT_PATH;\n      options.method = _boxConstants2.default.HTTP_VERBS.POST;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'updateTaskAssignment',\n    value: function updateTaskAssignment(options) {\n      options = options || {};\n      var taskAssignmentId = this._getTaskAssignmentId(options);\n      if (!this.client._simpleMode) {\n        var skipValidation = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setSkipValidation', this).call(this, options);\n        var ignoreModelValues = _get(Tasks.prototype.__proto__ || Object.getPrototypeOf(Tasks.prototype), '_setIgnoreModelValues', this).call(this, options);\n\n        this._getTaskAssignment(options, [], skipValidation, ignoreModelValues);\n      }\n      var apiPath = BASE_TASK_ASSIGNMENT_PATH + '/' + taskAssignmentId;\n      options.method = _boxConstants2.default.HTTP_VERBS.PUT;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'deleteTaskAssignment',\n    value: function deleteTaskAssignment(options) {\n      options = options || {};\n      var taskAssignmentId = this._getTaskAssignmentId(options);\n      var apiPath = BASE_TASK_ASSIGNMENT_PATH + '/' + taskAssignmentId;\n      options.method = _boxConstants2.default.HTTP_VERBS.DELETE;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Tasks;\n}(_manager2.default);\n\nexports.default = Tasks;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nvar _verifyRequiredValues = __webpack_require__(2);\n\nvar _verifyRequiredValues2 = _interopRequireDefault(_verifyRequiredValues);\n\nvar _normalizeObjectKeys = __webpack_require__(3);\n\nvar _normalizeObjectKeys2 = _interopRequireDefault(_normalizeObjectKeys);\n\nvar _manager = __webpack_require__(1);\n\nvar _manager2 = _interopRequireDefault(_manager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_PATH = '/users';\nvar MODEL_VALUES = {};\n\nvar Users = function (_Manager) {\n  _inherits(Users, _Manager);\n\n  function Users(client) {\n    _classCallCheck(this, Users);\n\n    return _possibleConstructorReturn(this, (Users.__proto__ || Object.getPrototypeOf(Users)).call(this, client, MODEL_VALUES));\n  }\n\n  _createClass(Users, [{\n    key: 'getCurrentUser',\n    value: function getCurrentUser(options) {\n      options = options || {};\n      var apiPath = BASE_PATH + '/me';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }, {\n    key: 'getGroupMemberships',\n    value: function getGroupMemberships(options) {\n      options = options || {};\n      var apiPath = BASE_PATH + '/' + userId + '/memberships';\n      options.method = _boxConstants2.default.HTTP_VERBS.GET;\n      return this.client.makeRequest(apiPath, options);\n    }\n  }]);\n\n  return Users;\n}(_manager2.default);\n\nexports.default = Users;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _baseBoxClient = __webpack_require__(7);\n\nvar _baseBoxClient2 = _interopRequireDefault(_baseBoxClient);\n\nvar _boxConstants = __webpack_require__(0);\n\nvar _boxConstants2 = _interopRequireDefault(_boxConstants);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PersistentBoxClient = function (_BaseBoxClient) {\n  _inherits(PersistentBoxClient, _BaseBoxClient);\n\n  function PersistentBoxClient(config) {\n    _classCallCheck(this, PersistentBoxClient);\n\n    config = config || {};\n\n    var _this = _possibleConstructorReturn(this, (PersistentBoxClient.__proto__ || Object.getPrototypeOf(PersistentBoxClient)).call(this, config));\n\n    _this._tokenExpirationTime = config.tokenExpirationTime || 2700000;\n    _this.accessTokenHandler = _this._checkConfigForAccessTokenHandler(config);\n    _this.accessTokenStore = _this._defaultAccessTokenStore();\n    _this.storage = config.storage || \"localStorage\";\n    _this.disableStorage = config.disableStorage || false;\n    _this.isCallback = config.isCallback || false;\n    _this.isPromise = config.isPromise || true;\n    _this.requestRetryTimes = config.retryTimes || 3;\n    _this.supportsStorage = _this._storageAvailable(_this.storage);\n    _this.suppressExpiration = config.suppressExpiration || false;\n    return _this;\n  }\n\n  _createClass(PersistentBoxClient, [{\n    key: '_checkConfigForAccessTokenHandler',\n    value: function _checkConfigForAccessTokenHandler(config) {\n      if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === \"object\" && (config.accessTokenHandler || config.access_token_handler)) {\n        config.accessTokenObject = config.accessTokenHandler || config.access_token_handler;\n        return config.accessTokenObject;\n      } else {\n        throw new Error(\"An accessTokenHandler is required to create a PersisentBoxClient. Please provide a callback function or promise that resolves to an access token\");\n      }\n    }\n  }, {\n    key: '_storageAvailable',\n    value: function _storageAvailable(type) {\n      try {\n        var storage = window[type],\n            x = '__storage_test__';\n        storage.setItem(x, x);\n        storage.removeItem(x);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }\n  }, {\n    key: '_verifyAccessTokenObject',\n    value: function _verifyAccessTokenObject(accessTokenObject) {\n      var verifiedAccessTokenObject = {};\n      if (typeof accessTokenObject === \"string\") {\n        verifiedAccessTokenObject.accessToken = accessTokenObject;\n        if (!this.suppressExpiration) {\n          verifiedAccessTokenObject.expiresAt = this._calculateTokenExpiration();\n        }\n        return verifiedAccessTokenObject;\n      }\n      if ((typeof accessTokenObject === 'undefined' ? 'undefined' : _typeof(accessTokenObject)) === \"object\" && (accessTokenObject.accessToken || accessTokenObject.access_token)) {\n        verifiedAccessTokenObject.accessToken = accessTokenObject.accessToken || accessTokenObject.access_token;\n      }\n      if ((typeof accessTokenObject === 'undefined' ? 'undefined' : _typeof(accessTokenObject)) === \"object\" && !this.suppressExpiration && (accessTokenObject.expiresAt || accessTokenObject.expires_at)) {\n        verifiedAccessTokenObject.expiresAt = accessTokenObject.expiresAt || accessTokenObject.expires_at;\n      }\n      if (!this.suppressExpiration && !verifiedAccessTokenObject.expiresAt) {\n        verifiedAccessTokenObject.expiresAt = this._calculateTokenExpiration();\n      }\n      return verifiedAccessTokenObject;\n    }\n  }, {\n    key: '_calculateTokenExpiration',\n    value: function _calculateTokenExpiration() {\n      return Date.now() + this._tokenExpirationTime;\n    }\n  }, {\n    key: '_promisifyAccessTokenHandler',\n    value: function _promisifyAccessTokenHandler(accessTokenHandler) {\n      if (typeof accessTokenHandler === 'function' && this.isCallback) {\n        return new this.Promise(function (resolve, reject) {\n          accessTokenHandler(function (err, token) {\n            if (err) {\n              reject(err);\n            }\n            if (token) {\n              resolve(token);\n            } else {\n              reject(\"Couldn't retrieve a new token.\");\n            }\n          });\n        });\n      } else if (typeof accessTokenHandler === 'function' && this.isPromise) {\n        var isAccessTokenHandlerAPromise = accessTokenHandler();\n        if ((typeof isAccessTokenHandlerAPromise === 'undefined' ? 'undefined' : _typeof(isAccessTokenHandlerAPromise)) === 'object' && 'then' in isAccessTokenHandlerAPromise) {\n          return isAccessTokenHandlerAPromise;\n        } else {\n          throw new Error(\"accessTokenHandler must resolve to a function or promise\");\n        }\n      } else {\n        throw new Error(\"accessTokenHandler must resolve to a function or promise\");\n      }\n    }\n  }, {\n    key: '_defaultAccessTokenStore',\n    value: function _defaultAccessTokenStore() {\n      var _this2 = this;\n\n      this._accessToken = function () {\n        if (_this2.supportsStorage && !_this2.disableStorage) {\n          return new _this2.Promise(function (resolve, reject) {\n            return _this2._promisifyAccessTokenHandler(_this2.accessTokenHandler).then(function (token) {\n              token = _this2._verifyAccessTokenObject(token);\n              window[_this2.storage].setItem(_boxConstants2.default.BOX_TOKEN_STORAGE_KEY, JSON.stringify(token));\n              resolve(token);\n            });\n          });\n        } else {\n          return new _this2.Promise(function (resolve, reject) {\n            return _this2._promisifyAccessTokenHandler(_this2.accessTokenHandler).then(function (token) {\n              token = _this2._verifyAccessTokenObject(token);\n              resolve(token);\n            });\n          });\n        }\n      };\n\n      return {\n        accessToken: this._accessToken\n      };\n    }\n  }, {\n    key: '_isExpired',\n    value: function _isExpired(token) {\n      var expiresAt = token.expires_at || token.expiresAt;\n      return expiresAt < Date.now() ? true : false;\n    }\n  }, {\n    key: 'retrieveToken',\n    value: function retrieveToken(requestRetryCount) {\n      if (this.supportsStorage && !this.disableStorage) {\n        var boxToken = window[this.storage].getItem(_boxConstants2.default.BOX_TOKEN_STORAGE_KEY);\n        boxToken = boxToken ? JSON.parse(boxToken) : null;\n        if (boxToken && !this._isExpired(boxToken) && requestRetryCount === 0) {\n          return new this.Promise(function (resolve, reject) {\n            resolve(boxToken);\n          });\n        } else {\n          window[this.storage].removeItem(_boxConstants2.default.BOX_TOKEN_STORAGE_KEY);\n          return this.accessTokenStore.accessToken();\n        }\n      } else {\n        return this.accessTokenStore.accessToken();\n      }\n    }\n  }, {\n    key: 'reauth',\n    value: function reauth(path, options, requestRetryCount) {\n      var _this3 = this;\n\n      return this.retrieveToken(requestRetryCount).then(function (token) {\n        var headers = options.headers || {};\n        headers[_boxConstants2.default.HEADER_AUTHORIZATION] = 'Bearer ' + token.accessToken;\n        options = options || {};\n        var compiledOptions = Object.assign({}, options);\n        compiledOptions.url = options.url || '' + _this3._baseApiUrl + path;\n        compiledOptions.headers = headers;\n        compiledOptions.params = _this3._applyFields(options);\n        _this3._checkForEmptyObjects(compiledOptions);\n        compiledOptions = _this3._formatOptions(compiledOptions);\n        return compiledOptions;\n      });\n    }\n  }, {\n    key: 'makeRequest',\n    value: function makeRequest(path, options, requestRetryCount) {\n      var _this4 = this;\n\n      requestRetryCount = requestRetryCount || 0;\n      if (requestRetryCount > this.requestRetryTimes) {\n        throw new Error(\"Exceeded retry count.\");\n      }\n      return this.reauth(path, options, requestRetryCount).then(function (compiledOptions) {\n        if (_this4._returnsOnlyOptions || options.returnsOnlyOptions) {\n          if (compiledOptions.upload) {\n            compiledOptions.headers[\"Content-Type\"] = undefined;\n            delete compiledOptions.upload;\n          }\n          return compiledOptions;\n        } else if (_this4.httpService.defaults && options.upload) {\n          return _this4._handleAngularFileUpload(_this4.httpService, compiledOptions);\n        } else {\n          return _this4.httpService(compiledOptions).catch(function (err) {\n            var status = err.status || err.response.status;\n            if (status === undefined || status <= 0) {\n              if (_this4.supportsStorage && !_this4.disableStorage) {\n                window[_this4.storage].removeItem(_boxConstants2.default.BOX_TOKEN_STORAGE_KEY);\n              }\n              return _this4.makeRequest(path, options, requestRetryCount + 1);\n            } else {\n              throw err;\n            }\n          });\n        }\n      });\n    }\n  }]);\n\n  return PersistentBoxClient;\n}(_baseBoxClient2.default);\n\nexports.default = PersistentBoxClient;\nmodule.exports = exports['default'];\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// BoxSdk.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 023623fdf57bbcdd9182","export default {\n  HEADER_AUTHORIZATION: 'Authorization',\n  HEADER_AUTHORIZATION_PREFIX: 'Bearer ',\n  HTTP_VERBS: {\n    GET: 'GET',\n    POST: 'POST',\n    PUT: 'PUT',\n    DELETE: 'DELETE',\n    OPTIONS: 'OPTIONS'\n  },\n  MODES: {\n    SKIP_VALIDATION: 'skipValidation',\n    IGNORE_MODEL_VALUES: 'ignoreModelValues'\n  },\n  FOLDER: 'folder',\n  FOLDER_ID: 'folderId',\n  FILE: 'file',\n  FILE_ID: 'fileId',\n  VERSION: 'version',\n  VERSION_ID: 'versionId',\n  COMMENT: 'comment',\n  COMMENT_ID: 'commentId',\n  BOX_TOKEN_STORAGE_KEY: 'box_token'\n};\n\n\n// WEBPACK FOOTER //\n// ./src/config/box-constants.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport InvestigateModes from '../util/investigate-modes';\nimport MapValues from '../util/map-values';\nimport FlattenDotProps from '../util/flatten-dotted-property-names';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport CreateRequestBody from '../util/create-request-body';\n\nconst MODEL_VALUES = {\n  SHARED_LINK: 'shared_link',\n  SHARED_LINK_ACCESS: 'shared_link.access',\n  UNSHARED_AT: 'shared_link.unshared_at',\n  PERMISSIONS: 'shared_link.permissions',\n  CAN_DOWNLOAD: 'shared_link.permissions.can_download',\n  CAN_PREVIEW: 'shared_link.permissions.can_preview'\n}\n\nexport default class Manager {\n  constructor(client, values) {\n    this.client = client;\n    this.ALL_VALUES = (values) ? MapValues(values) : null;\n    this.FLATTENED_VALUES = (this.ALL_VALUES) ? FlattenDotProps(this.ALL_VALUES) : null;\n  }\n\n  _getModel(options, values, skipValidation, ignoreModelValues) {\n    if (options.body) {\n      if (!skipValidation) { VerifyRequiredValues(options.body, values) };\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.body, this.FLATTENED_VALUES); }\n    } else if (options) {\n      if (!skipValidation) { VerifyRequiredValues(options, values) };\n      if (!ignoreModelValues) { NormalizeObjectKeys(options, this.FLATTENED_VALUES); }\n      options.body = CreateRequestBody(options, this.ALL_VALUES, ignoreModelValues);\n    } else {\n      values = values || this.ALL_VALUES;\n      let requiredValuesString = values.join(', ');\n      throw new Error(`Please select from the following fields when making this API call: ${requiredValuesString}`);\n    }\n  }\n\n  _objectifyString(options) {\n    if (typeof options === 'string') {\n      let id = options;\n      options = { id: id };\n    }\n    return options;\n  }\n\n  _getId(options) {\n    let id = '';\n    if (options.id) {\n      id = options.id;\n      delete options.id;\n    } else if (typeof options === 'string') {\n      id = options;\n      options = {};\n    }\n    return id;\n  }\n\n  _getFolderId(options) {\n    let folderId = this._getId(options);\n    if (options.folderId || options.folder_id) {\n      folderId = options.folderId || options.folder_id;\n      (options.folderId) ? delete options.folderId : delete options.folder_id;\n    } else if (options.folder && options.folder.id) {\n      folderId = options.folder.id;\n    }\n    this._testForMissingId(folderId, BOX_CONSTANTS.FOLDER, BOX_CONSTANTS.FOLDER_ID);\n    return folderId;\n  }\n\n  _getFileId(options) {\n    let fileId = this._getId(options);\n    if (options.fileId || options.file_id) {\n      fileId = options.fileId || options.file_id;\n      (options.fileId) ? delete options.fileId : delete options.file_id;\n    } else if (options.file && options.file.id) {\n      fileId = options.file.id;\n    }\n    this._testForMissingId(fileId, BOX_CONSTANTS.FILE, BOX_CONSTANTS.FILE_ID);\n    return fileId;\n  }\n\n  _getScope(options) {\n    let scope = 'enterprise';\n    if (options.scope && options.scope !== '') {\n      scope = options.scope;\n      delete options.scope;\n    }\n    return scope;\n  }\n\n  _getTemplateKey(options) {\n    let templateKey = '';\n    if (options.template && options.template !== '') {\n      templateKey = (options.template.key !== '') ? options.template.key : options.template;\n      delete options.template;\n    } else if (options.templateKey || options.template_key) {\n      templateKey = options.templateKey || options.template_key;\n      (options.templateKey) ? delete options.templateKey : delete options.template_key;\n    }\n    return templateKey;\n  }\n\n  _testForMissingId(id, idType, correctlyFormattedIdProp) {\n    idType = idType || 'unknown';\n    correctlyFormattedIdProp = correctlyFormattedIdProp || 'unknown';\n    if (id === '') {\n      throw new Error(`A(n) ${idType} field is required for this API call. Please provide an object with a key formatted in this style: ${correctlyFormattedIdProp}`);\n    }\n  }\n\n  _setSkipValidation(options) {\n    return InvestigateModes(options, BOX_CONSTANTS.MODES.SKIP_VALIDATION) || false;\n  }\n\n  _setIgnoreModelValues(options) {\n    return InvestigateModes(options, BOX_CONSTANTS.MODES.IGNORE_MODEL_VALUES) || false;\n  }\n\n  _createSharedLink(options, id, BASE_PATH, FLATTENED_VALUES) {\n    options = options || {};\n    options.body = options.body || {};\n    options.body.shared_link = options.body.shared_link || {};\n\n    if (!this.client._simpleMode) {\n      let skipValidation = this._setSkipValidation(options);\n      let ignoreModelValues = this._setIgnoreModelValues(options);\n\n      if (!ignoreModelValues) { NormalizeObjectKeys(options, FLATTENED_VALUES); }\n      if (!skipValidation) {\n        if (options[MODEL_VALUES.SHARED_LINK]) {\n          options.body[MODEL_VALUES.SHARED_LINK] = options[MODEL_VALUES.SHARED_LINK];\n          delete options[MODEL_VALUES.SHARED_LINK];\n        }\n      }\n    }\n    let apiPath = `${BASE_PATH}/${id}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/manager.js","export default (item, values) => {\n  values = values || [];\n  if (values.length === 0) {\n    return;\n  }\n  let temp = item;\n  values.map((requiredValue) => {\n    if (requiredValue.indexOf('.') !== -1) {\n      let requiredValues = requiredValue.split('.');\n      for (let i = 0, l = requiredValues.length; i < l; i++) {\n        let prop = requiredValues[i];\n        if (temp.hasOwnProperty(prop)) {\n          temp = temp[prop];\n        }\n      }\n      if (!temp) { throw new Error(`A(n) ${requiredValue} field is required for this API call`) };\n    } else if (!item[requiredValue]) {\n      throw new Error(`A(n) ${requiredValue} field is required for this API call`);\n    }\n  });\n};\n\n\n// WEBPACK FOOTER //\n// ./src/util/verify-required-values.js","'use strict';\nexport default function NormalizeObjectKeys(options, values) {\n  values = values || [];\n\n  Object.keys(options).map((key) => {\n    if (values.indexOf(key) !== -1) {\n      return;\n    }\n    if (typeof options[key] === 'object') {\n      NormalizeObjectKeys(options[key], values);\n    }\n\n    let splitCamel = key.split(/(?=[A-Z])/g);\n\n    if (splitCamel.length > 1) {\n      let regroup = [];\n      for (var i = 1; i < splitCamel.length; i++) {\n        regroup.push(splitCamel[i].toLowerCase());\n      }\n      if (splitCamel.length > 0) { regroup.unshift(splitCamel[0]); }\n      let newKey = regroup.join('_');\n\n      if (values.indexOf(newKey) !== -1) {\n\n        options[newKey] = options[key];\n        delete options[key];\n      }\n    }\n  });\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/normalize-object-keys.js","export default (options, values, ignoreModelValues) => {\n  ignoreModelValues = ignoreModelValues || false;\n  values = values || [];\n\n  if (ignoreModelValues) {\n    Object.keys(options).map((key) => {\n      if (key !== 'body') {\n        options.body[key] = options[key];\n        delete options[key];\n      }\n    });\n    return options.body;\n  }\n\n  if (values.length === 0 && ignoreModelValues === false) {\n    return {};\n  }\n\n  options.body = options.body || {};\n  Object.keys(options).map((key) => {\n    if (values.indexOf(key) !== -1) {\n      if (key !== 'body') {\n        options.body[key] = options[key];\n        delete options[key];\n      }\n    }\n  });\n  return options.body;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/create-request-body.js","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Rusha\"] = factory();\n\telse\n\t\troot[\"Rusha\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar RushaCore = __webpack_require__(5);\n\nvar _require = __webpack_require__(1),\n    toHex = _require.toHex,\n    ceilHeapSize = _require.ceilHeapSize;\n\nvar conv = __webpack_require__(6);\n\n// Calculate the length of buffer that the sha1 routine uses\n// including the padding.\nvar padlen = function (len) {\n  for (len += 9; len % 64 > 0; len += 1) {}\n  return len;\n};\n\nvar padZeroes = function (bin, len) {\n  var h8 = new Uint8Array(bin.buffer);\n  var om = len % 4,\n      align = len - om;\n  switch (om) {\n    case 0:\n      h8[align + 3] = 0;\n    case 1:\n      h8[align + 2] = 0;\n    case 2:\n      h8[align + 1] = 0;\n    case 3:\n      h8[align + 0] = 0;\n  }\n  for (var i = (len >> 2) + 1; i < bin.length; i++) {\n    bin[i] = 0;\n  }\n};\n\nvar padData = function (bin, chunkLen, msgLen) {\n  bin[chunkLen >> 2] |= 0x80 << 24 - (chunkLen % 4 << 3);\n  // To support msgLen >= 2 GiB, use a float division when computing the\n  // high 32-bits of the big-endian message length in bits.\n  bin[((chunkLen >> 2) + 2 & ~0x0f) + 14] = msgLen / (1 << 29) | 0;\n  bin[((chunkLen >> 2) + 2 & ~0x0f) + 15] = msgLen << 3;\n};\n\nvar getRawDigest = function (heap, padMaxChunkLen) {\n  var io = new Int32Array(heap, padMaxChunkLen + 320, 5);\n  var out = new Int32Array(5);\n  var arr = new DataView(out.buffer);\n  arr.setInt32(0, io[0], false);\n  arr.setInt32(4, io[1], false);\n  arr.setInt32(8, io[2], false);\n  arr.setInt32(12, io[3], false);\n  arr.setInt32(16, io[4], false);\n  return out;\n};\n\nvar Rusha = function () {\n  function Rusha(chunkSize) {\n    _classCallCheck(this, Rusha);\n\n    chunkSize = chunkSize || 64 * 1024;\n    if (chunkSize % 64 > 0) {\n      throw new Error('Chunk size must be a multiple of 128 bit');\n    }\n    this._offset = 0;\n    this._maxChunkLen = chunkSize;\n    this._padMaxChunkLen = padlen(chunkSize);\n    // The size of the heap is the sum of:\n    // 1. The padded input message size\n    // 2. The extended space the algorithm needs (320 byte)\n    // 3. The 160 bit state the algoritm uses\n    this._heap = new ArrayBuffer(ceilHeapSize(this._padMaxChunkLen + 320 + 20));\n    this._h32 = new Int32Array(this._heap);\n    this._h8 = new Int8Array(this._heap);\n    this._core = new RushaCore({ Int32Array: Int32Array }, {}, this._heap);\n  }\n\n  Rusha.prototype._initState = function _initState(heap, padMsgLen) {\n    this._offset = 0;\n    var io = new Int32Array(heap, padMsgLen + 320, 5);\n    io[0] = 1732584193;\n    io[1] = -271733879;\n    io[2] = -1732584194;\n    io[3] = 271733878;\n    io[4] = -1009589776;\n  };\n\n  Rusha.prototype._padChunk = function _padChunk(chunkLen, msgLen) {\n    var padChunkLen = padlen(chunkLen);\n    var view = new Int32Array(this._heap, 0, padChunkLen >> 2);\n    padZeroes(view, chunkLen);\n    padData(view, chunkLen, msgLen);\n    return padChunkLen;\n  };\n\n  Rusha.prototype._write = function _write(data, chunkOffset, chunkLen, off) {\n    conv(data, this._h8, this._h32, chunkOffset, chunkLen, off || 0);\n  };\n\n  Rusha.prototype._coreCall = function _coreCall(data, chunkOffset, chunkLen, msgLen, finalize) {\n    var padChunkLen = chunkLen;\n    this._write(data, chunkOffset, chunkLen);\n    if (finalize) {\n      padChunkLen = this._padChunk(chunkLen, msgLen);\n    }\n    this._core.hash(padChunkLen, this._padMaxChunkLen);\n  };\n\n  Rusha.prototype.rawDigest = function rawDigest(str) {\n    var msgLen = str.byteLength || str.length || str.size || 0;\n    this._initState(this._heap, this._padMaxChunkLen);\n    var chunkOffset = 0,\n        chunkLen = this._maxChunkLen;\n    for (chunkOffset = 0; msgLen > chunkOffset + chunkLen; chunkOffset += chunkLen) {\n      this._coreCall(str, chunkOffset, chunkLen, msgLen, false);\n    }\n    this._coreCall(str, chunkOffset, msgLen - chunkOffset, msgLen, true);\n    return getRawDigest(this._heap, this._padMaxChunkLen);\n  };\n\n  Rusha.prototype.digest = function digest(str) {\n    return toHex(this.rawDigest(str).buffer);\n  };\n\n  Rusha.prototype.digestFromString = function digestFromString(str) {\n    return this.digest(str);\n  };\n\n  Rusha.prototype.digestFromBuffer = function digestFromBuffer(str) {\n    return this.digest(str);\n  };\n\n  Rusha.prototype.digestFromArrayBuffer = function digestFromArrayBuffer(str) {\n    return this.digest(str);\n  };\n\n  Rusha.prototype.resetState = function resetState() {\n    this._initState(this._heap, this._padMaxChunkLen);\n    return this;\n  };\n\n  Rusha.prototype.append = function append(chunk) {\n    var chunkOffset = 0;\n    var chunkLen = chunk.byteLength || chunk.length || chunk.size || 0;\n    var turnOffset = this._offset % this._maxChunkLen;\n    var inputLen = void 0;\n\n    this._offset += chunkLen;\n    while (chunkOffset < chunkLen) {\n      inputLen = Math.min(chunkLen - chunkOffset, this._maxChunkLen - turnOffset);\n      this._write(chunk, chunkOffset, inputLen, turnOffset);\n      turnOffset += inputLen;\n      chunkOffset += inputLen;\n      if (turnOffset === this._maxChunkLen) {\n        this._core.hash(this._maxChunkLen, this._padMaxChunkLen);\n        turnOffset = 0;\n      }\n    }\n    return this;\n  };\n\n  Rusha.prototype.getState = function getState() {\n    var turnOffset = this._offset % this._maxChunkLen;\n    var heap = void 0;\n    if (!turnOffset) {\n      var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n      heap = io.buffer.slice(io.byteOffset, io.byteOffset + io.byteLength);\n    } else {\n      heap = this._heap.slice(0);\n    }\n    return {\n      offset: this._offset,\n      heap: heap\n    };\n  };\n\n  Rusha.prototype.setState = function setState(state) {\n    this._offset = state.offset;\n    if (state.heap.byteLength === 20) {\n      var io = new Int32Array(this._heap, this._padMaxChunkLen + 320, 5);\n      io.set(new Int32Array(state.heap));\n    } else {\n      this._h32.set(new Int32Array(state.heap));\n    }\n    return this;\n  };\n\n  Rusha.prototype.rawEnd = function rawEnd() {\n    var msgLen = this._offset;\n    var chunkLen = msgLen % this._maxChunkLen;\n    var padChunkLen = this._padChunk(chunkLen, msgLen);\n    this._core.hash(padChunkLen, this._padMaxChunkLen);\n    var result = getRawDigest(this._heap, this._padMaxChunkLen);\n    this._initState(this._heap, this._padMaxChunkLen);\n    return result;\n  };\n\n  Rusha.prototype.end = function end() {\n    return toHex(this.rawEnd().buffer);\n  };\n\n  return Rusha;\n}();\n\nmodule.exports = Rusha;\nmodule.exports._core = RushaCore;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/* eslint-env commonjs, browser */\n\n//\n// toHex\n//\n\nvar precomputedHex = new Array(256);\nfor (var i = 0; i < 256; i++) {\n  precomputedHex[i] = (i < 0x10 ? '0' : '') + i.toString(16);\n}\n\nmodule.exports.toHex = function (arrayBuffer) {\n  var binarray = new Uint8Array(arrayBuffer);\n  var res = new Array(arrayBuffer.byteLength);\n  for (var _i = 0; _i < res.length; _i++) {\n    res[_i] = precomputedHex[binarray[_i]];\n  }\n  return res.join('');\n};\n\n//\n// ceilHeapSize\n//\n\nmodule.exports.ceilHeapSize = function (v) {\n  // The asm.js spec says:\n  // The heap object's byteLength must be either\n  // 2^n for n in [12, 24) or 2^24 * n for n ≥ 1.\n  // Also, byteLengths smaller than 2^16 are deprecated.\n  var p = 0;\n  // If v is smaller than 2^16, the smallest possible solution\n  // is 2^16.\n  if (v <= 65536) return 65536;\n  // If v < 2^24, we round up to 2^n,\n  // otherwise we round up to 2^24 * n.\n  if (v < 16777216) {\n    for (p = 1; p < v; p = p << 1) {}\n  } else {\n    for (p = 16777216; p < v; p += 16777216) {}\n  }\n  return p;\n};\n\n//\n// isDedicatedWorkerScope\n//\n\nmodule.exports.isDedicatedWorkerScope = function (self) {\n  var isRunningInWorker = 'WorkerGlobalScope' in self && self instanceof self.WorkerGlobalScope;\n  var isRunningInSharedWorker = 'SharedWorkerGlobalScope' in self && self instanceof self.SharedWorkerGlobalScope;\n  var isRunningInServiceWorker = 'ServiceWorkerGlobalScope' in self && self instanceof self.ServiceWorkerGlobalScope;\n\n  // Detects whether we run inside a dedicated worker or not.\n  //\n  // We can't just check for `DedicatedWorkerGlobalScope`, since IE11\n  // has a bug where it only supports `WorkerGlobalScope`.\n  //\n  // Therefore, we consider us as running inside a dedicated worker\n  // when we are running inside a worker, but not in a shared or service worker.\n  //\n  // When new types of workers are introduced, we will need to adjust this code.\n  return isRunningInWorker && !isRunningInSharedWorker && !isRunningInServiceWorker;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, worker */\n\nmodule.exports = function () {\n  var Rusha = __webpack_require__(0);\n\n  var hashData = function (hasher, data, cb) {\n    try {\n      return cb(null, hasher.digest(data));\n    } catch (e) {\n      return cb(e);\n    }\n  };\n\n  var hashFile = function (hasher, readTotal, blockSize, file, cb) {\n    var reader = new self.FileReader();\n    reader.onloadend = function onloadend() {\n      if (reader.error) {\n        return cb(reader.error);\n      }\n      var buffer = reader.result;\n      readTotal += reader.result.byteLength;\n      try {\n        hasher.append(buffer);\n      } catch (e) {\n        cb(e);\n        return;\n      }\n      if (readTotal < file.size) {\n        hashFile(hasher, readTotal, blockSize, file, cb);\n      } else {\n        cb(null, hasher.end());\n      }\n    };\n    reader.readAsArrayBuffer(file.slice(readTotal, readTotal + blockSize));\n  };\n\n  var workerBehaviourEnabled = true;\n\n  self.onmessage = function (event) {\n    if (!workerBehaviourEnabled) {\n      return;\n    }\n\n    var data = event.data.data,\n        file = event.data.file,\n        id = event.data.id;\n    if (typeof id === 'undefined') return;\n    if (!file && !data) return;\n    var blockSize = event.data.blockSize || 4 * 1024 * 1024;\n    var hasher = new Rusha(blockSize);\n    hasher.resetState();\n    var done = function (err, hash) {\n      if (!err) {\n        self.postMessage({ id: id, hash: hash });\n      } else {\n        self.postMessage({ id: id, error: err.name });\n      }\n    };\n    if (data) hashData(hasher, data, done);\n    if (file) hashFile(hasher, 0, blockSize, file, done);\n  };\n\n  return function () {\n    workerBehaviourEnabled = false;\n  };\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-env commonjs, browser */\n\nvar work = __webpack_require__(4);\nvar Rusha = __webpack_require__(0);\nvar createHash = __webpack_require__(7);\nvar runWorker = __webpack_require__(2);\n\nvar _require = __webpack_require__(1),\n    isDedicatedWorkerScope = _require.isDedicatedWorkerScope;\n\nvar isRunningInDedicatedWorker = typeof self !== 'undefined' && isDedicatedWorkerScope(self);\n\nRusha.disableWorkerBehaviour = isRunningInDedicatedWorker ? runWorker() : function () {};\n\nRusha.createWorker = function () {\n  var worker = work(/*require.resolve*/(2));\n  var terminate = worker.terminate;\n  worker.terminate = function () {\n    URL.revokeObjectURL(worker.objectURL);\n    terminate.call(worker);\n  };\n  return worker;\n};\n\nRusha.createHash = createHash;\n\nmodule.exports = Rusha;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction webpackBootstrapFunc (modules) {\n/******/  // The module cache\n/******/  var installedModules = {};\n\n/******/  // The require function\n/******/  function __webpack_require__(moduleId) {\n\n/******/    // Check if module is in cache\n/******/    if(installedModules[moduleId])\n/******/      return installedModules[moduleId].exports;\n\n/******/    // Create a new module (and put it into the cache)\n/******/    var module = installedModules[moduleId] = {\n/******/      i: moduleId,\n/******/      l: false,\n/******/      exports: {}\n/******/    };\n\n/******/    // Execute the module function\n/******/    modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/    // Flag the module as loaded\n/******/    module.l = true;\n\n/******/    // Return the exports of the module\n/******/    return module.exports;\n/******/  }\n\n/******/  // expose the modules object (__webpack_modules__)\n/******/  __webpack_require__.m = modules;\n\n/******/  // expose the module cache\n/******/  __webpack_require__.c = installedModules;\n\n/******/  // identity function for calling harmony imports with the correct context\n/******/  __webpack_require__.i = function(value) { return value; };\n\n/******/  // define getter function for harmony exports\n/******/  __webpack_require__.d = function(exports, name, getter) {\n/******/    if(!__webpack_require__.o(exports, name)) {\n/******/      Object.defineProperty(exports, name, {\n/******/        configurable: false,\n/******/        enumerable: true,\n/******/        get: getter\n/******/      });\n/******/    }\n/******/  };\n\n/******/  // define __esModule on exports\n/******/  __webpack_require__.r = function(exports) {\n/******/    Object.defineProperty(exports, '__esModule', { value: true });\n/******/  };\n\n/******/  // getDefaultExport function for compatibility with non-harmony modules\n/******/  __webpack_require__.n = function(module) {\n/******/    var getter = module && module.__esModule ?\n/******/      function getDefault() { return module['default']; } :\n/******/      function getModuleExports() { return module; };\n/******/    __webpack_require__.d(getter, 'a', getter);\n/******/    return getter;\n/******/  };\n\n/******/  // Object.prototype.hasOwnProperty.call\n/******/  __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/  // __webpack_public_path__\n/******/  __webpack_require__.p = \"/\";\n\n/******/  // on error function for async loading\n/******/  __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n  var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n  return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\nvar moduleNameReqExp = '[\\\\.|\\\\-|\\\\+|\\\\w|\\/|@]+'\nvar dependencyRegExp = '\\\\((\\/\\\\*.*?\\\\*\\/)?\\s?.*?(' + moduleNameReqExp + ').*?\\\\)' // additional chars when output.pathinfo is true\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n  return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction getModuleDependencies (sources, module, queueName) {\n  var retval = {}\n  retval[queueName] = []\n\n  var fnString = module.toString()\n  var wrapperSignature = fnString.match(/^function\\s?\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n  if (!wrapperSignature) return retval\n  var webpackRequireName = wrapperSignature[1]\n\n  // main bundle deps\n  var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g')\n  var match\n  while ((match = re.exec(fnString))) {\n    if (match[3] === 'dll-reference') continue\n    retval[queueName].push(match[3])\n  }\n\n  // dll deps\n  re = new RegExp('\\\\(' + quoteRegExp(webpackRequireName) + '\\\\(\"(dll-reference\\\\s(' + moduleNameReqExp + '))\"\\\\)\\\\)' + dependencyRegExp, 'g')\n  while ((match = re.exec(fnString))) {\n    if (!sources[match[2]]) {\n      retval[queueName].push(match[1])\n      sources[match[2]] = __webpack_require__(match[1]).m\n    }\n    retval[match[2]] = retval[match[2]] || []\n    retval[match[2]].push(match[4])\n  }\n\n  return retval\n}\n\nfunction hasValuesInQueues (queues) {\n  var keys = Object.keys(queues)\n  return keys.reduce(function (hasValues, key) {\n    return hasValues || queues[key].length > 0\n  }, false)\n}\n\nfunction getRequiredModules (sources, moduleId) {\n  var modulesQueue = {\n    main: [moduleId]\n  }\n  var requiredModules = {\n    main: []\n  }\n  var seenModules = {\n    main: {}\n  }\n\n  while (hasValuesInQueues(modulesQueue)) {\n    var queues = Object.keys(modulesQueue)\n    for (var i = 0; i < queues.length; i++) {\n      var queueName = queues[i]\n      var queue = modulesQueue[queueName]\n      var moduleToCheck = queue.pop()\n      seenModules[queueName] = seenModules[queueName] || {}\n      if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue\n      seenModules[queueName][moduleToCheck] = true\n      requiredModules[queueName] = requiredModules[queueName] || []\n      requiredModules[queueName].push(moduleToCheck)\n      var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName)\n      var newModulesKeys = Object.keys(newModules)\n      for (var j = 0; j < newModulesKeys.length; j++) {\n        modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []\n        modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]])\n      }\n    }\n  }\n\n  return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n  options = options || {}\n  var sources = {\n    main: __webpack_require__.m\n  }\n\n  var requiredModules = options.all ? { main: Object.keys(sources) } : getRequiredModules(sources, moduleId)\n\n  var src = ''\n\n  Object.keys(requiredModules).filter(function (m) { return m !== 'main' }).forEach(function (module) {\n    var entryModule = 0\n    while (requiredModules[module][entryModule]) {\n      entryModule++\n    }\n    requiredModules[module].push(entryModule)\n    sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })'\n    src = src + 'var ' + module + ' = (' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(entryModule)) + ')({' + requiredModules[module].map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[module][id].toString() }).join(',') + '});\\n'\n  })\n\n  src = src + '(' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.main.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources.main[id].toString() }).join(',') + '})(self);'\n\n  var blob = new window.Blob([src], { type: 'text/javascript' })\n  if (options.bare) { return blob }\n\n  var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n  var workerUrl = URL.createObjectURL(blob)\n  var worker = new window.Worker(workerUrl)\n  worker.objectURL = workerUrl\n\n  return worker\n}\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// The low-level RushCore module provides the heart of Rusha,\n// a high-speed sha1 implementation working on an Int32Array heap.\n// At first glance, the implementation seems complicated, however\n// with the SHA1 spec at hand, it is obvious this almost a textbook\n// implementation that has a few functions hand-inlined and a few loops\n// hand-unrolled.\nmodule.exports = function RushaCore(stdlib$846, foreign$847, heap$848) {\n    'use asm';\n    var H$849 = new stdlib$846.Int32Array(heap$848);\n    function hash$850(k$851, x$852) {\n        // k in bytes\n        k$851 = k$851 | 0;\n        x$852 = x$852 | 0;\n        var i$853 = 0, j$854 = 0, y0$855 = 0, z0$856 = 0, y1$857 = 0, z1$858 = 0, y2$859 = 0, z2$860 = 0, y3$861 = 0, z3$862 = 0, y4$863 = 0, z4$864 = 0, t0$865 = 0, t1$866 = 0;\n        y0$855 = H$849[x$852 + 320 >> 2] | 0;\n        y1$857 = H$849[x$852 + 324 >> 2] | 0;\n        y2$859 = H$849[x$852 + 328 >> 2] | 0;\n        y3$861 = H$849[x$852 + 332 >> 2] | 0;\n        y4$863 = H$849[x$852 + 336 >> 2] | 0;\n        for (i$853 = 0; (i$853 | 0) < (k$851 | 0); i$853 = i$853 + 64 | 0) {\n            z0$856 = y0$855;\n            z1$858 = y1$857;\n            z2$860 = y2$859;\n            z3$862 = y3$861;\n            z4$864 = y4$863;\n            for (j$854 = 0; (j$854 | 0) < 64; j$854 = j$854 + 4 | 0) {\n                t1$866 = H$849[i$853 + j$854 >> 2] | 0;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 & y2$859 | ~y1$857 & y3$861) | 0) + ((t1$866 + y4$863 | 0) + 1518500249 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[k$851 + j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 64 | 0; (j$854 | 0) < (k$851 + 80 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 & y2$859 | ~y1$857 & y3$861) | 0) + ((t1$866 + y4$863 | 0) + 1518500249 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 80 | 0; (j$854 | 0) < (k$851 + 160 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 ^ y2$859 ^ y3$861) | 0) + ((t1$866 + y4$863 | 0) + 1859775393 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 160 | 0; (j$854 | 0) < (k$851 + 240 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 & y2$859 | y1$857 & y3$861 | y2$859 & y3$861) | 0) + ((t1$866 + y4$863 | 0) - 1894007588 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            for (j$854 = k$851 + 240 | 0; (j$854 | 0) < (k$851 + 320 | 0); j$854 = j$854 + 4 | 0) {\n                t1$866 = (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) << 1 | (H$849[j$854 - 12 >> 2] ^ H$849[j$854 - 32 >> 2] ^ H$849[j$854 - 56 >> 2] ^ H$849[j$854 - 64 >> 2]) >>> 31;\n                t0$865 = ((y0$855 << 5 | y0$855 >>> 27) + (y1$857 ^ y2$859 ^ y3$861) | 0) + ((t1$866 + y4$863 | 0) - 899497514 | 0) | 0;\n                y4$863 = y3$861;\n                y3$861 = y2$859;\n                y2$859 = y1$857 << 30 | y1$857 >>> 2;\n                y1$857 = y0$855;\n                y0$855 = t0$865;\n                H$849[j$854 >> 2] = t1$866;\n            }\n            y0$855 = y0$855 + z0$856 | 0;\n            y1$857 = y1$857 + z1$858 | 0;\n            y2$859 = y2$859 + z2$860 | 0;\n            y3$861 = y3$861 + z3$862 | 0;\n            y4$863 = y4$863 + z4$864 | 0;\n        }\n        H$849[x$852 + 320 >> 2] = y0$855;\n        H$849[x$852 + 324 >> 2] = y1$857;\n        H$849[x$852 + 328 >> 2] = y2$859;\n        H$849[x$852 + 332 >> 2] = y3$861;\n        H$849[x$852 + 336 >> 2] = y4$863;\n    }\n    return { hash: hash$850 };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nvar _this = this;\n\n/* eslint-env commonjs, browser */\n\nvar reader = void 0;\nif (typeof self !== 'undefined' && typeof self.FileReaderSync !== 'undefined') {\n  reader = new self.FileReaderSync();\n}\n\n// Convert a binary string and write it to the heap.\n// A binary string is expected to only contain char codes < 256.\nvar convStr = function (str, H8, H32, start, len, off) {\n  var i = void 0,\n      om = off % 4,\n      lm = (len + om) % 4,\n      j = len - lm;\n  switch (om) {\n    case 0:\n      H8[off] = str.charCodeAt(start + 3);\n    case 1:\n      H8[off + 1 - (om << 1) | 0] = str.charCodeAt(start + 2);\n    case 2:\n      H8[off + 2 - (om << 1) | 0] = str.charCodeAt(start + 1);\n    case 3:\n      H8[off + 3 - (om << 1) | 0] = str.charCodeAt(start);\n  }\n  if (len < lm + (4 - om)) {\n    return;\n  }\n  for (i = 4 - om; i < j; i = i + 4 | 0) {\n    H32[off + i >> 2] = str.charCodeAt(start + i) << 24 | str.charCodeAt(start + i + 1) << 16 | str.charCodeAt(start + i + 2) << 8 | str.charCodeAt(start + i + 3);\n  }\n  switch (lm) {\n    case 3:\n      H8[off + j + 1 | 0] = str.charCodeAt(start + j + 2);\n    case 2:\n      H8[off + j + 2 | 0] = str.charCodeAt(start + j + 1);\n    case 1:\n      H8[off + j + 3 | 0] = str.charCodeAt(start + j);\n  }\n};\n\n// Convert a buffer or array and write it to the heap.\n// The buffer or array is expected to only contain elements < 256.\nvar convBuf = function (buf, H8, H32, start, len, off) {\n  var i = void 0,\n      om = off % 4,\n      lm = (len + om) % 4,\n      j = len - lm;\n  switch (om) {\n    case 0:\n      H8[off] = buf[start + 3];\n    case 1:\n      H8[off + 1 - (om << 1) | 0] = buf[start + 2];\n    case 2:\n      H8[off + 2 - (om << 1) | 0] = buf[start + 1];\n    case 3:\n      H8[off + 3 - (om << 1) | 0] = buf[start];\n  }\n  if (len < lm + (4 - om)) {\n    return;\n  }\n  for (i = 4 - om; i < j; i = i + 4 | 0) {\n    H32[off + i >> 2 | 0] = buf[start + i] << 24 | buf[start + i + 1] << 16 | buf[start + i + 2] << 8 | buf[start + i + 3];\n  }\n  switch (lm) {\n    case 3:\n      H8[off + j + 1 | 0] = buf[start + j + 2];\n    case 2:\n      H8[off + j + 2 | 0] = buf[start + j + 1];\n    case 1:\n      H8[off + j + 3 | 0] = buf[start + j];\n  }\n};\n\nvar convBlob = function (blob, H8, H32, start, len, off) {\n  var i = void 0,\n      om = off % 4,\n      lm = (len + om) % 4,\n      j = len - lm;\n  var buf = new Uint8Array(reader.readAsArrayBuffer(blob.slice(start, start + len)));\n  switch (om) {\n    case 0:\n      H8[off] = buf[3];\n    case 1:\n      H8[off + 1 - (om << 1) | 0] = buf[2];\n    case 2:\n      H8[off + 2 - (om << 1) | 0] = buf[1];\n    case 3:\n      H8[off + 3 - (om << 1) | 0] = buf[0];\n  }\n  if (len < lm + (4 - om)) {\n    return;\n  }\n  for (i = 4 - om; i < j; i = i + 4 | 0) {\n    H32[off + i >> 2 | 0] = buf[i] << 24 | buf[i + 1] << 16 | buf[i + 2] << 8 | buf[i + 3];\n  }\n  switch (lm) {\n    case 3:\n      H8[off + j + 1 | 0] = buf[j + 2];\n    case 2:\n      H8[off + j + 2 | 0] = buf[j + 1];\n    case 1:\n      H8[off + j + 3 | 0] = buf[j];\n  }\n};\n\nmodule.exports = function (data, H8, H32, start, len, off) {\n  if (typeof data === 'string') {\n    return convStr(data, H8, H32, start, len, off);\n  }\n  if (data instanceof Array) {\n    return convBuf(data, H8, H32, start, len, off);\n  }\n  // Safely doing a Buffer check using \"this\" to avoid Buffer polyfill to be included in the dist\n  if (_this && _this.Buffer && _this.Buffer.isBuffer(data)) {\n    return convBuf(data, H8, H32, start, len, off);\n  }\n  if (data instanceof ArrayBuffer) {\n    return convBuf(new Uint8Array(data), H8, H32, start, len, off);\n  }\n  if (data.buffer instanceof ArrayBuffer) {\n    return convBuf(new Uint8Array(data.buffer, data.byteOffset, data.byteLength), H8, H32, start, len, off);\n  }\n  if (data instanceof Blob) {\n    return convBlob(data, H8, H32, start, len, off);\n  }\n  throw new Error('Unsupported data type.');\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-env commonjs, browser */\n\nvar Rusha = __webpack_require__(0);\n\nvar _require = __webpack_require__(1),\n    toHex = _require.toHex;\n\nvar Hash = function () {\n  function Hash() {\n    _classCallCheck(this, Hash);\n\n    this._rusha = new Rusha();\n    this._rusha.resetState();\n  }\n\n  Hash.prototype.update = function update(data) {\n    this._rusha.append(data);\n    return this;\n  };\n\n  Hash.prototype.digest = function digest(encoding) {\n    var digest = this._rusha.rawEnd().buffer;\n    if (!encoding) {\n      return digest;\n    }\n    if (encoding === 'hex') {\n      return toHex(digest);\n    }\n    throw new Error('unsupported digest encoding');\n  };\n\n  return Hash;\n}();\n\nmodule.exports = function () {\n  return new Hash();\n};\n\n/***/ })\n/******/ ]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/rusha/dist/rusha.js\n// module id = 5\n// module chunks = 0","'use strict';\nimport \"whatwg-fetch\";\n\nexport default function BoxHttp(options) {\n  if (options.upload) {\n    // Workaround for upload with Fetch library for now...\n    // https://github.com/whatwg/fetch/issues/380\n    return new Promise((resolve, reject) => {\n      const client = new XMLHttpRequest();\n      let uri = options.url;\n      let method = options.method;\n\n      client.open(method, uri, true);\n      if (options.headers) {\n        if (options.headers[\"Content-Type\"]) {\n          delete options.headers[\"Content-Type\"];\n        }\n        Object.keys(options.headers).forEach((key) => {\n          client.setRequestHeader(key, options.headers[key]);\n        });\n      }\n      client.send(options.body);\n      client.onload = function () {\n        if (client.status >= 200 && client.status < 300) {\n          resolve(JSON.parse(client.response));\n        } else {\n          reject(handleXMLHttpRequestErrors(client));\n        }\n      }\n      client.onerror = function () {\n        reject(handleXMLHttpRequestErrors(client));\n      }\n    });\n    // Workaround for cancelling requests with Fetch library for now...\n    // https://github.com/whatwg/fetch/issues/380  \n  } else if (!options.useXHR && window && window.fetch) {\n    return fetch(options.url, options)\n      .then(handleErrors)\n      .then(response => constructResponse(response, options));\n  }\n  else {\n    const client = new XMLHttpRequest();\n    let request = new Promise((resolve, reject) => {\n      let uri = options.url;\n      let method = options.method;\n\n      client.open(method, uri, true);\n      Object.keys(options.headers).forEach((key) => {\n        client.setRequestHeader(key, options.headers[key]);\n      });\n      client.send(options.body);\n      client.onload = function () {\n        if (client.status >= 200 && client.status < 300) {\n          let returnData = (client.response) ? JSON.parse(client.response) : {};\n          let headers;\n          try {\n            headers = parseXHRHeaders(client.getAllResponseHeaders());\n          } catch (e) {\n            headers = client.getAllResponseHeaders();\n          }\n          let builtResponse = {\n            data: returnData,\n            headers: headers,\n            status: client.status,\n            statusText: client.statusText\n          }\n          resolve(constructResponse(builtResponse, options));\n        } else {\n          if (options.hasOwnProperty('verbose') && options.verbose) {\n            console.log(client.getAllResponseHeaders());\n          }\n          reject(handleXMLHttpRequestErrors(client));\n        }\n      }\n      client.onerror = function () {\n        reject(handleXMLHttpRequestErrors(client));\n      }\n    });\n    if (options.returnCancelToken) {\n      function abort() {\n        client.abort();\n      }\n      return {\n        promise: request,\n        abort: abort\n      };\n    } else {\n      return request;\n    }\n  }\n  function handleXMLHttpRequestErrors(client) {\n    let error;\n    if (client.statusText) {\n      error = new Error(client.statusText);\n    } else {\n      error = new Error(\"Unknown\");\n    }\n\n    let headers;\n    try {\n      headers = parseXHRHeaders(client.getAllResponseHeaders());\n    } catch (e) {\n      headers = client.getAllResponseHeaders();\n    }\n\n    let responseText;\n    if (client.response) {\n      try {\n        responseText = JSON.parse(client.response);\n      } catch (e) {\n        responseText = client.response\n      }\n    } else {\n      responseText = {};\n    }\n    error.response = {};\n    error.response.headers = headers;\n    error.response.status = client.status;\n    error.response.statusText = client.statusText;\n    error.response.data = responseText;\n    return error;\n  }\n  function handleErrors(response) {\n    if (!response.ok) {\n      var error = new Error(response.statusText);\n      if (response)\n        return response.json().catch(() => { return {}; })\n          .then((body) => {\n            error.response = {};\n            if (Object.keys(body).length === 0) {\n              error.response = response\n            } else {\n              error.response = body;\n            }\n            throw error;\n          })\n\n    }\n    return response;\n  }\n\n  function constructResponse(response, options) {\n    let verbose = false ;\n    if (options.hasOwnProperty('verbose')) {\n      verbose = options.verbose;\n      delete options.verbose;\n    }\n    if (verbose) {\n      console.log('options');\n      console.log(options);\n      console.log('response');\n      console.log(response);\n    }\n    if (options && options.includeFullResponse) {\n      if (response.data && response.headers && response.status) {\n        return new Promise(function (resolve, reject) {\n          resolve(response);\n        });\n      }\n      let buildResponse = {\n        data: {},\n        headers: {},\n        status: \"\"\n      };\n      return new Promise(function (resolve, reject) {\n        const headers = response.headers;\n        let retrieveHeaders;\n        if (headers && headers.entries && typeof (headers.entries) === 'function') {\n          retrieveHeaders = {};\n          const iter = headers.entries();\n          let header = iter.next();\n          while (!header.done) {\n            if (header.value && header.value.length && header.value.length === 2) {\n              retrieveHeaders[header.value[0]] = header.value[1];\n            }\n            header = iter.next();\n          }\n        } else {\n          retrieveHeaders = response.headers;\n        }\n        buildResponse.headers = retrieveHeaders;\n        buildResponse.status = response.status;\n        if (checkForJSONResponse(response)) {\n          return response.json().catch(() => { return {}; })\n            .then(function (body) {\n              buildResponse.data = body;\n              resolve(buildResponse);\n            })\n        } else if (checkForDataResponse(response)) {\n          return new Promise(function (resolve, reject) {\n            buildResponse.data = response.data;\n            resolve(buildResponse);\n          });\n        } else {\n          resolve(buildResponse);\n        }\n      });\n    } else {\n      if (checkForJSONResponse(response)) {\n        return response.json().catch(() => { return {}; });\n      } else if (checkForDataResponse(response)) {\n        return new Promise(function (resolve, reject) {\n          resolve(response.data);\n        });\n      } else {\n        return new Promise(function (resolve, reject) {\n          resolve({});\n        });\n      }\n    }\n  }\n\n  function parseXHRHeaders(headerStr) {\n    var headers = {};\n    if (!headerStr) {\n      return headers;\n    }\n    var headerPairs = headerStr.split('\\u000d\\u000a');\n    for (var i = 0; i < headerPairs.length; i++) {\n      var headerPair = headerPairs[i];\n      var index = headerPair.indexOf('\\u003a\\u0020');\n      if (index > 0) {\n        var key = headerPair.substring(0, index).toLowerCase();\n        var val = headerPair.substring(index + 2);\n        headers[key] = val;\n      }\n    }\n    return headers;\n  }\n\n  function checkForJSONResponse(response) {\n    return (response.json && typeof response.json === 'function') ? true : false;\n  }\n  function checkForDataResponse(response) {\n    return (response.data && typeof response.data === 'object') ? true : false;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/box-http.js","import Folders from './managers/folders';\nimport Files from './managers/files';\nimport WebLinks from './managers/web-links';\nimport Collaborations from './managers/collaborations';\nimport Collections from './managers/collections';\nimport Comments from './managers/comments';\nimport Groups from './managers/groups';\nimport Metadata from './managers/metadata';\nimport Search from './managers/search';\nimport Tasks from './managers/tasks';\nimport Users from './managers/users';\nimport BOX_CONSTANTS from './config/box-constants'\nimport BoxHttp from './box-http';\n\nexport default class BaseBoxClient {\n  constructor(config) {\n    this._folders = new Folders(this);\n    this._files = new Files(this);\n    this._webLinks = new WebLinks(this);\n    this._collaborations = new Collaborations(this);\n    this._collections = new Collections(this);\n    this._comments = new Comments(this);\n    this._groups = new Groups(this);\n    this._metadata = new Metadata(this);\n    this._search = new Search(this);\n    this._tasks = new Tasks(this);\n    this._users = new Users(this);\n    this._baseApiUrl = config.baseUrl || \"https://api.box.com/2.0\";\n    this._returnsOnlyOptions = (config.hasOwnProperty('noRequestMode') && config.noRequestMode === true) ? true : false;\n    this._skipValidation = (config.hasOwnProperty('skipValidation') && config.skipValidation === true) ? true : false;\n    this._simpleMode = (config.hasOwnProperty('simpleMode') && config.simpleMode === true) ? true : false;\n    this._accessToken = this._checkTokenType(config);\n    this._hasStoredAccessToken = (this._accessToken) ? true : false;\n    this._verbose = (config.hasOwnProperty('verbose') && config.verbose === true) ? true : false;\n\n    this.httpService = config.httpService || BoxHttp;\n    this.Promise = config.Promise || Promise;\n  }\n\n  get folders() {\n    return this._folders;\n  }\n\n  get files() {\n    return this._files;\n  }\n\n  get webLinks() {\n    return this._webLinks;\n  }\n\n  get collaborations() {\n    return this._collaborations;\n  }\n\n  get collections() {\n    return this._collections;\n  }\n\n  get comments() {\n    return this._comments;\n  }\n\n  get groups() {\n    return this._groups;\n  }\n\n  get metadata() {\n    return this._metadata;\n  }\n\n  get search() {\n    return this._search;\n  }\n\n  get tasks() {\n    return this._tasks;\n  }\n\n  get users() {\n    return this._users;\n  }\n\n  _checkTokenType(token, removeFromOptions) {\n    removeFromOptions = removeFromOptions || false;\n    if (token && typeof token === 'string') {\n      return token;\n    }\n\n    let foundToken;\n\n    if (token && typeof token === 'object') {\n      if (token.hasOwnProperty('accessToken')) {\n        foundToken = token.accessToken;\n        if (removeFromOptions) {\n          delete token.accessToken;\n        }\n      }\n\n      if (token.hasOwnProperty('access_token')) {\n        foundToken = token.access_token;\n        if (removeFromOptions) {\n          delete token.access_token;\n        }\n      }\n    }\n\n    return foundToken;\n  }\n\n  _handleAuthorization(options, accessToken) {\n    if (accessToken) {\n      return this._constructHeaders(options, accessToken);\n    }\n\n    if (options && options.accessToken || options.access_token) {\n      let accessToken = options.accessToken || options.access_token;\n      (options.accessToken) ? delete options.accessToken : delete options.access_token;\n      return this._constructHeaders(options, accessToken);\n    } else if (this._hasStoredAccessToken) {\n      return this._constructHeaders(options, this._accessToken);\n    } else {\n      let token = this._checkTokenType(options, true);\n      return this._constructHeaders(options, token);\n    }\n  }\n\n  _constructHeaders(options, accessToken) {\n    let headers = {};\n    if (accessToken) {\n      headers[BOX_CONSTANTS.HEADER_AUTHORIZATION] = this._constructAuthorizationHeader(accessToken);\n    }\n\n    if (options.headers) {\n      Object.assign(headers, options.headers);\n    }\n\n    return headers;\n  }\n\n  _constructAuthorizationHeader(accessToken) {\n    return `${BOX_CONSTANTS.HEADER_AUTHORIZATION_PREFIX}${accessToken}`\n  }\n\n  _checkForEmptyObjects(options) {\n    Object.keys(options).map((field) => {\n      if (field !== \"body\" && \n          field !== \"upload\" && \n          field !== \"chunkedUpload\" && \n          field !== \"useXHR\" && \n          field !== \"returnCancelToken\" && \n          field !== \"returnsOnlyOptions\" && \n          field !== \"includeFullResponse\" && \n          this._isEmpty(options[field])) {\n        delete options[field];\n      }\n    });\n  }\n\n  _isEmpty(object) {\n    for (let key in object) {\n      if (object.hasOwnProperty(key)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  _applyFields(options) {\n    options.params = options.params || {};\n    if (options.fields) {\n      options.params.fields = options.fields;\n      delete options.fields;\n    }\n    return options.params;\n  }\n\n  _formatOptions(options) {\n    if (options.chunkedUpload) {\n      return options;\n    }\n\n    let formattedOptions = {};\n    (options.useXHR) ? formattedOptions.useXHR = true : null;\n    (options.returnCancelToken) ? formattedOptions.returnCancelToken = true : null;\n    (options.includeFullResponse) ? formattedOptions.includeFullResponse = true : null;\n    let uri = options.url;\n\n    if (options.params) {\n      uri += '?';\n      uri += Object.keys(options.params).map((key) => {\n        return encodeURIComponent(key) + '=' + encodeURIComponent(options.params[key]);\n      }).join('&');\n    }\n    formattedOptions.url = uri;\n    formattedOptions.headers = options.headers;\n\n    if (options.upload) {\n      options.headers['Content-Type'] = \"multipart/form-data\";\n      options.mode = 'cors';\n      return options;\n    }\n\n    if (options.body && typeof options.body === 'object' && !options.upload) {\n      formattedOptions.body = JSON.stringify(options.body);\n      if (!formattedOptions.headers['Content-Type']) {\n        formattedOptions.headers['Content-Type'] = \"application/json;charset=UTF-8\";\n      }\n    }\n\n    formattedOptions.method = options.method;\n    formattedOptions.data = options.body;\n    formattedOptions.mode = 'cors';\n    return formattedOptions;\n  }\n\n  _handleAngularFileUpload($http, options) {\n    options.headers['Content-Type'] = undefined;\n    return $http.post(options.url, options.body, {\n      headers: options.headers\n    });\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/base-box-client.js","export default (values) => {\n  return Object.keys(values).map((key) => {\n    return values[key];\n  });\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/map-values.js","export default function Base64ArrayBuffer(arrayBuffer) {\n    var base64 = ''\n    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\n    var bytes = new Uint8Array(arrayBuffer)\n    var byteLength = bytes.byteLength\n    var byteRemainder = byteLength % 3\n    var mainLength = byteLength - byteRemainder\n\n    var a, b, c, d\n    var chunk\n\n    for (var i = 0; i < mainLength; i = i + 3) {\n        chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]\n\n        a = (chunk & 16515072) >> 18\n        b = (chunk & 258048) >> 12\n        c = (chunk & 4032) >> 6\n        d = chunk & 63\n\n        base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]\n    }\n\n    if (byteRemainder == 1) {\n        chunk = bytes[mainLength]\n\n        a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2\n        b = (chunk & 3) << 4 // 3   = 2^2 - 1\n        base64 += encodings[a] + encodings[b] + '=='\n    } else if (byteRemainder == 2) {\n        chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]\n\n        a = (chunk & 64512) >> 10\n        b = (chunk & 1008) >> 4\n        c = (chunk & 15) << 2\n        base64 += encodings[a] + encodings[b] + encodings[c] + '='\n    }\n\n    return base64\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/base64-array-buffer.js","'use strict';\nexport default () => {\n  return ((window && window.FileReader) || FileReader) ? true : false;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/check-for-file-reader.js","import BoxHttp from './box-http';\nimport BasicBoxClient from './basic-box-client';\nimport PersistentBoxClient from './persistent-box-client';\n\nexport default class SDK {\n  constructor() {\n    this._BasicBoxClient = BasicBoxClient;\n    this._PersistentBoxClient = PersistentBoxClient;\n  }\n  get BasicBoxClient() {\n    return this._BasicBoxClient;\n  }\n  get PersistentBoxClient() {\n    return this._PersistentBoxClient;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/sdk.js","module.exports = __WEBPACK_EXTERNAL_MODULE_12__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"fetch\"\n// module id = 12\n// module chunks = 0","'use strict';\nimport BaseBoxClient from './base-box-client';\nimport BOX_CONSTANTS from './config/box-constants'\n\nexport default class BasicBoxClient extends BaseBoxClient {\n  constructor(config) {\n    config = config || {};\n    super(config);\n  }\n\n  makeRequest(path, options) {\n    options = options || {};\n    options.url = options.url || `${this._baseApiUrl}${path}`;\n    options.headers = this._handleAuthorization(options);\n    options.params = this._applyFields(options);\n    this._checkForEmptyObjects(options);\n    options = this._formatOptions(options);\n    if (this._returnsOnlyOptions || options.returnsOnlyOptions) {\n      if (options.upload) {\n        options.headers[\"Content-Type\"] = undefined;\n        delete options.upload;\n      }\n      return options;\n    } else if (this.httpService.defaults && options.upload) {\n      return this._handleAngularFileUpload(this.httpService, options);\n    } else {\n      options.verbose = this._verbose;\n      return this.httpService(options);\n    }\n  }\n\n  removeAccessTokenAndRerunRequest(options, accessToken, setAsNewAccessToken) {\n    setAsNewAccessToken = setAsNewAccessToken || false;\n    if (options.setAsNewAccessToken) {\n      setAsNewAccessToken = options.setAsNewAccessToken;\n      delete options.setAsNewAccessToken;\n    }\n\n    if (!accessToken) {\n      accessToken = this._checkTokenType(options, true);\n    }\n\n    if (options.headers && options.headers[BOX_CONSTANTS.HEADER_AUTHORIZATION]) {\n      delete options.headers[BOX_CONSTANTS.HEADER_AUTHORIZATION];\n    }\n\n    this.removeAccessToken();\n\n    if (setAsNewAccessToken) {\n      this.removeAccessToken();\n      this._accessToken = this._checkTokenType(accessToken);\n      this._hasStoredAccessToken = true;\n    }\n\n    options.headers = this._handleAuthorization(options, accessToken);\n    options = this._formatOptions(options);\n    return BoxHttp(options);\n  }\n\n  removeAccessToken() {\n    this._accessToken = null;\n    this._hasStoredAccessToken = false;\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/basic-box-client.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport CreateRequestBody from '../util/create-request-body';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport Manager from './manager';\n\nconst BASE_PATH = '/folders';\nconst MODEL_VALUES = {\n  NAME: 'name',\n  PARENT: 'parent',\n  ID: 'parent.id',\n  DESCRIPTION: 'description',\n  SHARED_LINK: 'shared_link',\n  SHARED_LINK_ACCESS: 'shared_link.access',\n  UNSHARED_AT: 'shared_link.unshared_at',\n  PASSWORD: 'shared_link.password',\n  PERMISSIONS: 'shared_link.permissions',\n  CAN_DOWNLOAD: 'shared_link.permissions.can_download',\n  CAN_PREVIEW: 'shared_link.permissions.can_preview',\n  FOLDER_UPLOAD_EMAIL: 'folder_upload_email',\n  FOLDER_UPLOAD_EMAIL_ACCESS: 'folder_upload_email.access',\n  OWNED_BY: 'owned_by',\n  OWNED_BY_ID: 'owned_by.id',\n  SYNC_STATE: 'sync_state',\n  TAGS: 'tags'\n}\n\nexport default class Folders extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  _getFolder(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n\n    if (options.folder) {\n      if (!skipValidation) { VerifyRequiredValues(options.folder, values) };\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.folder, this.FLATTENED_VALUES); }\n      options.body = CreateRequestBody(options.folder, this.ALL_VALUES, ignoreModelValues);\n      delete options.folder;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let folderId = super._getFolderId(options);\n    let apiPath = `${BASE_PATH}/${folderId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getItems(options) {\n    options = super._objectifyString(options) || {};\n    let folderId = super._getFolderId(options);\n    let apiPath = `${BASE_PATH}/${folderId}/items`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getCollaborations(options) {\n    options = super._objectifyString(options) || {};\n    let folderId = super._getFolderId(options);\n    let apiPath = `${BASE_PATH}/${folderId}/collaborations`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getTrashedItems(options) {\n    options = options || {};\n    let apiPath = `${BASE_PATH}/trash/items`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getTrashedFolder(options) {\n    options = super._objectifyString(options) || {};\n    let folderId = super._getFolderId(options);\n\n    let apiPath = `${BASE_PATH}/${folderId}/trash`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  create(options) {\n    options = options || {};\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [MODEL_VALUES.PARENT, MODEL_VALUES.ID, MODEL_VALUES.NAME];\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getFolder(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  update(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getFolder(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${folderId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  copy(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n      const REQUIRED_VALUES = [MODEL_VALUES.PARENT, MODEL_VALUES.ID];\n      this._getFolder(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n\n      if (options.newName) {\n        options.body.name = options.newName;\n        delete options.newName;\n      }\n    }\n    let apiPath = `${BASE_PATH}/${folderId}/copy`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  createSharedLink(options) {\n    options = super._objectifyString(options) || {};\n    let folderId = super._getFolderId(options);\n    return super._createSharedLink(options, folderId, BASE_PATH, this.FLATTENED_VALUES);\n  }\n\n  updateCollections(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n\n    if (options.collections) {\n      options.body.collections = options.collections;\n      delete options.collections;\n    }\n\n    let apiPath = `${BASE_PATH}/${folderId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  restore(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getFolder(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${folderId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  delete(options) {\n    options = super._objectifyString(options) || {};\n    options.params = options.params || {};\n    options.params.recursive = options.params.recursive || true;\n    let folderId = super._getFolderId(options);\n\n    let apiPath = `${BASE_PATH}/${folderId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  permanentlyDelete(options) {\n    options = super._objectifyString(options) || {};\n    let folderId = super._getFolderId(options);\n\n    let apiPath = `${BASE_PATH}/${folderId}/trash`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/folders.js","'use strict';\nimport MapValues from './map-values';\nimport BOX_CONSTANTS from '../config/box-constants';\n\nconst MODE_VALUES = MapValues(BOX_CONSTANTS.MODES);\n\nexport default (options, mode) => {\n  let runMode;\n  if(MODE_VALUES.indexOf(mode) !== -1) {\n    runMode = options[mode];\n    delete options[mode];\n  }\n  return runMode;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/investigate-modes.js","export default (values) => {\n  values = Array.prototype.concat.apply([], values.map((value) => {\n    if (value.indexOf('.') !== -1) {\n      let split = value.split('.');\n      return split.filter((value) => {\n        return values.indexOf(value) === -1;\n      });\n    } else {\n      return value;\n    }\n  }));\n\n  return values;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/flatten-dotted-property-names.js","'use strict';\nimport ChunkedUploader from './chunked-uploader';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport CreateRequestBody from '../util/create-request-body';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport Manager from './manager';\nimport generateSHA1 from '../util/generate-sha1';\nimport generateMD5 from '../util/generate-md5';\nimport checkForFormData from '../util/check-for-form-data';\n\nconst BASE_PATH = '/files';\nconst LOCK = 'lock';\nconst UPLOAD_PATH = 'https://upload.box.com/api/2.0';\nconst MODEL_VALUES = {\n  NAME: 'name',\n  PARENT: 'parent',\n  ID: 'parent.id',\n  DESCRIPTION: 'description',\n  SHARED_LINK: 'shared_link',\n  SHARED_LINK_ACCESS: 'shared_link.access',\n  UNSHARED_AT: 'shared_link.unshared_at',\n  PERMISSIONS: 'shared_link.permissions',\n  CAN_DOWNLOAD: 'shared_link.permissions.can_download',\n  CAN_PREVIEW: 'shared_link.permissions.can_preview',\n  FOLDER_UPLOAD_EMAIL: 'folder_upload_email',\n  FOLDER_UPLOAD_EMAIL_ACCESS: 'folder_upload_email.access',\n  OWNED_BY: 'owned_by',\n  OWNED_BY_ID: 'owned_by.id',\n  SYNC_STATE: 'sync_state',\n  TAGS: 'tags',\n  SIZE: 'size'\n}\n\nconst DIMENSION_VALUES = {\n  MIN_HEIGHT: 'min_height',\n  MAX_HEIGHT: 'max_height',\n  MIN_WIDTH: 'min_width',\n  MAX_WIDTH: 'max_width'\n}\n\nconst DIMENSIONS = Object.keys(DIMENSION_VALUES).map((key) => { return DIMENSION_VALUES[key]; });\n\nconst MINIMUM_CHUNKED_FILE_SIZE = 50000000;\n\nexport default class Files extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n    this.UPLOAD_PATH = UPLOAD_PATH;\n  }\n\n  _getVersionId(options) {\n    let versionId;\n    if (options.versionId || options.version_id) {\n      versionId = options.versionId || options.version_id;\n      (options.versionId) ? delete options.versionId : options.version_id;\n    }\n    super._testForMissingId(versionId, BOX_CONSTANTS.VERSION, BOX_CONSTANTS.VERSION_ID);\n    return versionId;\n  }\n\n  _getFile(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n\n    if (options.file) {\n      if (!skipValidation) { VerifyRequiredValues(options.file, values) };\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.file, this.FLATTENED_VALUES); }\n      options.body = CreateRequestBody(options.file, this.ALL_VALUES, ignoreModelValues);\n      delete options.file;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  // Currently not possible due to CORS\n  // Need to implement your own server endpoint\n  // and retrieve download redirect url.\n  // download(options) {\n  //   options.params = options.params || {};\n\n  //   let versionId = options.versionId || '';\n  //   if (versionId) {\n  //     options.params.version = versionId;\n  //   }\n\n  //   let fileId = super._getFileId(options);\n\n  //   let apiPath = `${BASE_PATH}/${fileId}/content`;\n  //   options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n  //   return this.client.makeRequest(apiPath, options);\n  // }\n\n  getDownloadUrl(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n    options.params = options.params || {};\n    if (options.fields || options.params.fields) {\n      options.params.fields = (options.params.fields) ? options.params.fields : options.fields;\n      options.params.fields = options.params.fields.concat(',download_url');\n    } else {\n      options.params = {\n        fields: \"download_url\"\n      };\n    }\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  // Be careful, this is an experimental and untested method.\n  // Use at your own risk!\n  // Tested lightly with Angular 1 and vanilla JS in lastest build of Chrome Version 59.0.3071.115 on MacOS\n  chunkedUpload(options) {\n    options = options || {};\n    if (!options.file) {\n      throw new Error(\"Must make this call with an HTML5 File object.\");\n    }\n    if (options.file && options.file.size < MINIMUM_CHUNKED_FILE_SIZE) {\n      throw new Error(\"File size less than minimum allowed for this API: 50000000\");\n    }\n    options.name = options.name || options.file.name;\n    let session = new ChunkedUploader(this, options.name, options.file, options.parentFolder, options.listeners);\n    return session.startSession();\n  }\n\n  // Be careful, this is an experimental and untested method.\n  // Use at your own risk!\n  // Tested lightly with Angular 1 and vanilla JS in lastest build of Chrome Version 59.0.3071.115 on MacOS\n  chunkedUploadNewFileVersion(options) {\n    options = options || {};\n    if(!options.id) {\n      throw new Error(\"chunkedUploadNewVersion requires an existing file ID\");\n    }\n    if (!options.file) {\n      throw new Error(\"Must make this call with an HTML5 File object.\");\n    }\n    if (options.file && options.file.size < MINIMUM_CHUNKED_FILE_SIZE) {\n      throw new Error(\"File size less than minimum allowed for this API: 50000000\");\n    }\n    options.name = options.name || options.file.name;\n    let session = new ChunkedUploader(this, options.name, options.file, options.parentFolder, options.listeners, options.id);\n    return session.startSession();\n  }\n\n  upload(options) {\n    options = options || {};\n    options.url = options.url || `${UPLOAD_PATH}/files/content`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    options.upload = true;\n    return this.client.makeRequest(null, options);\n  }\n\n  uploadNewFileVersion(options) {\n    if (!checkForFormData()) {\n      throw new Error(\"Form Data not supported. The uploadNewFileVersion requires Form Data in the browser.\");\n    }\n    options = options || {};\n    let fileId = options.body.get(\"id\") || options.body.get(\"fileId\") || options.body.get(\"file_id\");\n    options.url = options.url || `${UPLOAD_PATH}/files/${fileId}/content`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    options.upload = true;\n    return this.client.makeRequest(null, options);\n  }\n\n  // Be careful, this is an experimental and untested method.\n  // Use at your own risk!\n  uploadWithPreflightAndMd5(options) {\n    options = options || {};\n    var file = options.file;\n    var formData = options.body;\n    var preflightOptions = { name: options.name, parent: options.parent, size: options.file.size }\n    var decorateOptions = JSON.parse(JSON.stringify(options));\n    return this.preflightCheck(preflightOptions)\n      .then((resp) => {\n        if (resp.upload_url) {\n          decorateOptions.url = resp.upload_url;\n        }\n        return;\n      })\n      .then(() => {\n        if (file === undefined) {\n          throw new Error(\"Couldn't access file...\");\n        }\n        return generateMD5(file);\n      })\n      .then((md5) => {\n        decorateOptions.headers = decorateOptions.headers || {};\n        decorateOptions.body = formData;\n        delete decorateOptions.file;\n        decorateOptions.headers[\"Content-MD5\"] = md5;\n        return this.upload(decorateOptions);\n      });\n  }\n\n  uploadNewFileVersionWithPreflightAndMd5(options) {\n    if (!checkForFormData()) {\n      throw new Error(\"Form Data not supported. The uploadNewFileVersion requires Form Data in the browser.\");\n    }\n    options = options || {};\n    let file = options.file;\n    let formData = options.body;\n    let decorateOptions = JSON.parse(JSON.stringify(options));\n    options.fileId = options.body.get(\"id\") || options.body.get(\"fileId\") || options.body.get(\"file_id\");\n    return this.preflightCheckNewFileVersion(options)\n      .then((resp) => {\n        if (resp.upload_url) {\n          decorateOptions.url = resp.upload_url;\n        }\n        return;\n      })\n      .then(() => {\n        if (file === undefined) {\n          throw new Error(\"Couldn't access file...\");\n        }\n        return generateMD5(file);\n      })\n      .then((md5) => {\n        decorateOptions.headers = decorateOptions.headers || {};\n        decorateOptions.body = formData;\n        delete decorateOptions.file;\n        decorateOptions.headers[\"Content-MD5\"] = md5;\n        return this.uploadNewFileVersion(decorateOptions);\n      });\n  }\n\n  preflightCheck(options) {\n    options = options || {};\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [MODEL_VALUES.SIZE, MODEL_VALUES.NAME];\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getFile(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/content`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.OPTIONS;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  preflightCheckNewFileVersion(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [MODEL_VALUES.SIZE, MODEL_VALUES.NAME];\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getFile(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${fileId}/content`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.OPTIONS;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  update(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    options.url = options.url || `${UPLOAD_PATH}/${fileId}/content`;\n    this.upload(options);\n  }\n\n  getComments(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n    let apiPath = `${BASE_PATH}/${fileId}/comments`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getTasks(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n    let apiPath = `${BASE_PATH}/${fileId}/tasks`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getEmbedLink(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n\n    options.params = options.params || {};\n    if (options.fields || options.params.fields) {\n      if (options.fields) {\n        options.params.fields = options.fields;\n        delete options.fields;\n      }\n      options.params.fields = options.params.fields.concat(',expiring_embed_link');\n    } else {\n      options.params.fields = 'expiring_embed_link';\n    }\n\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getVersions(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n\n    let apiPath = `${BASE_PATH}/${fileId}/versions`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getThumbnail(options) {\n    options = options || {};\n    options.extension = options.extension || '.png';\n    options.params = options.params || {};\n    let fileId = super._getFileId(options);\n\n    Object.keys(options).map((key) => {\n      if (DIMENSIONS.indexOf(key) !== -1) {\n        options.params[key] = options[key];\n        delete options[key];\n      }\n    });\n\n    let apiPath = `${BASE_PATH}/${fileId}/thumbnail${options.extension}`;\n    delete options.extension;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getTrashedFile(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n\n    let apiPath = `${BASE_PATH}/${fileId}/trash`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getCollaborations(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n    let apiPath = `${BASE_PATH}/${fileId}/collaborations`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  createSharedLink(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    return super._createSharedLink(options, fileId, BASE_PATH, this.FLATTENED_VALUES);\n  }\n\n  promoteVersion(options) {\n    options = options || {};\n    options.body = options.body || {};\n    let fileId = super._getFileId(options);\n\n    if (!options.body.id) {\n      let versionId = this._getVersionId(options);\n      options.body.id = versionId;\n    }\n\n    options.body.type = 'file_version';\n\n    let apiPath = `${BASE_PATH}/${fileId}/versions/current`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  copy(options) {\n    options = options || {};\n    options.body = options.body || {};\n    let fileId = super._getFileId(options);\n\n    if (!options.body.parent && !options.body.parent.id) {\n      options.body.parent = {};\n      if (options.id) {\n        options.body.parent.id = options.id;\n        delete options.id;\n      } else if (options.parentId) {\n        options.body.parent.id = options.parentId;\n        delete options.parentId;\n      } else {\n        throw new Error(\"A parentId or id is required for this API call.\");\n      }\n    }\n\n    if (options.name) {\n      options.body.name = options.name;\n      delete options.name;\n    } else if (options.newName) {\n      options.body.name = options.newName;\n      delete options.newName;\n    }\n\n    let apiPath = `${BASE_PATH}/${fileId}/copy`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  updateInfo(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getFile(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  lock(options) {\n    options = options || {};\n    options.body = options.body || {};\n    let fileId = super._getFileId(options);\n\n    if (options[LOCK]) {\n      options.body[LOCK] = options[LOCK];\n      options.body[LOCK].type = LOCK;\n      delete options[LOCK];\n    } else {\n      options.body.lock = {\n        type: LOCK\n      }\n    }\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  unlock(options) {\n    options = options || {};\n    options.body = options.body || {};\n    let fileId = super._getFileId(options);\n\n    if (options[LOCK]) {\n      delete options[LOCK];\n    }\n    options.body[LOCK] = null;\n\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  restore(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n\n    if (options.parent) {\n      options.body = options.body || {};\n      options.body.parent = options.parent;\n      delete options.parent;\n    }\n\n    if (options.name) {\n      options.body = options.body || {};\n      options.body.name = options.name;\n      delete options.name;\n    }\n\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  delete(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n\n    let apiPath = `${BASE_PATH}/${fileId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  deleteVersion(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    let versionId = this._getVersionId(options);\n\n    let apiPath = `${BASE_PATH}/${fileId}/versions/${versionId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  permanentlyDelete(options) {\n    options = super._objectifyString(options) || {};\n    let fileId = super._getFileId(options);\n\n    let apiPath = `${BASE_PATH}/${fileId}/trash`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  createSHA1Hash(blob) {\n    return generateSHA1(blob);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/files.js","import BOX_CONSTANTS from '../config/box-constants';\nimport Base64ArrayBuffer from '../util/base64-array-buffer';\nimport Rusha from 'rusha';\nconst PROGRESS_EVENT_NAME = \"boxChunkedUploadProgress\";\nconst FAILURE_EVENT_NAME = \"boxChunkedUploadFailure\";\nconst SUCCESS_EVENT_NAME = \"boxChunkedUploadSuccess\";\nconst START_EVENT_NAME = \"boxChunkedUploadStart\";\nconst FILE_COMMIT_EVENT_NAME = \"boxChunkedUploadFileCommitted\";\nconst FILE_COMMIT_RETRY_EVENT_NAME = \"boxChunkedUploadFileCommitRetry\";\nconst COMPLETED_EVENT_NAME = \"boxChunkedUploadCompleted\";\nconst START_CANCELLING_EVENT_NAME = \"boxChunkedUploadStartCancelling\";\nconst END_CANCELLING_EVENT_NAME = \"boxChunkedUploadEndCancelling\";\nconst ABORT_UPLOAD_EVENT_NAME = \"boxChunkedUploadAbortUpload\";\nexport default class ChunkedUploader {\n    constructor(filesManager, fileName, file, parentFolder, listeners, newVersionFileId) {\n        this.rusha = new Rusha();\n        this.hash = Rusha.createHash();\n        this.filesManager = filesManager;\n        this.client = filesManager.client;\n        this.file = file;\n        this.fileName = fileName;\n        this.newVersionFileId = newVersionFileId || \"\";\n        this.parts = [];\n        this.tasks = [];\n        this.partRequestCancellations = [];\n        this.parentFolder = parentFolder;\n        this.session = {\n            id: \"\",\n            endpoints: {\n                listParts: \"\",\n                commit: \"\",\n                uploadPart: \"\",\n                status: \"\",\n                abort: \"\"\n            },\n            expiresAt: \"\",\n            partSize: 0,\n            totalParts: 0,\n            fileDigest: {}\n        }\n        this.getFailureNotification = listeners.getFailureNotification || null;\n        this.getSuccessNotification = listeners.getSuccessNotification || null;\n        this.getStartNotification = listeners.getStartNotification || null;\n        this.getFileCommitNotification = listeners.getFileCommitNotification || null;\n        this.getFileCommitRetryNotification = listeners.getFileCommitRetryNotification || null;\n        this.getCompletedNotification = listeners.getCompletedNotification || null;\n        this.getIsCancellingNotification = listeners.getIsCancellingNotification || null;\n        this.getIsCancelledNotification = listeners.getIsCancelledNotification || null;\n        this.handleProgressUpdates = listeners.handleProgressUpdates || null;\n        this.progress = {\n            isCancelled: false,\n            isComplete: false,\n            didStart: false,\n            didFail: false,\n            didSucceed: false,\n            didFileCommit: false,\n            didSessionStart: false,\n            percentageProcessed: 0,\n            percentageUploaded: 0,\n            fileCommitRetryTime: 0,\n            session: {}\n        };\n        this.retry = 0;\n        this.uploadCount = 0;\n        this.processedCount = 0;\n        this.isCancelled = false;\n        this.finishedCancelling = false;\n        this.finishedUploading = false;\n        this.retryCommitTimer = null;\n\n        let self = this;\n        this.abortUpload = function (evt) {\n            if (self.retryCommitTimer) {\n                clearTimeout(self.retryCommitTimer);\n            }\n            self.partRequestCancellations.forEach(function (part) {\n                if (part.abort) {\n                    part.abort();\n                }\n            })\n            self.isCancelled = true;\n            if (self.getIsCancellingNotification !== null) {\n                self.progress.didFileCommit = false;\n                self.progress.didSucceed = false;\n                self.progress.didFail = false;\n                self.fireEvent(self.progress, START_CANCELLING_EVENT_NAME);\n            }\n            if (self.session && self.session.endpoints && self.session.endpoints.abort) {\n                let options = {};\n                options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n                options.url = self.session.endpoints.abort;\n                return self.client.makeRequest(null, options)\n                    .then(function (resp) {\n                        if (self.getIsCancelledNotification !== null) {\n                            self.fireEndCancellingEvent();\n                        }\n                        self.endSession();\n                        self.finishedCancelling = true;\n                    })\n                    .catch(function (e) {\n                        if (self.getIsCancelledNotification !== null) {\n                            self.fireEndCancellingEvent();\n                        }\n                        self.endSession();\n                        self.finishedCancelling = true;\n                    });\n            } else {\n                if (self.getIsCancelledNotification !== null) {\n                    self.fireEndCancellingEvent();\n                }\n                self.finishedCancelling = true;\n                self.endSession();\n            }\n        }\n        addEventListener(ABORT_UPLOAD_EVENT_NAME, this.abortUpload);\n    }\n\n    fireEndCancellingEvent() {\n        let self = this;\n        self.progress.didFileCommit = false;\n        self.progress.didSucceed = false;\n        self.progress.didFail = false;\n        self.progress.isComplete = true;\n        self.progress.isCancelled = true;\n        self.fireEvent(self.progress, END_CANCELLING_EVENT_NAME);\n    }\n\n    endSession() {\n        this.removeListeners();\n        this.session = null;\n        this.filesManager = null;\n        this.client = null;\n        this.file = null;\n        this.fileName = null;\n        this.parts = null;\n        this.tasks = null;\n        this.partRequestCancellations = null;\n        this.parentFolder = null;\n        this.retry = null;\n        this.uploadCount = null;\n        this.processedCount = null;\n        this.isCancelled = null;\n        this.finishedCancelling = null;\n        this.finishedUploading = null;\n        this.abortUpload = null;\n    }\n\n    addListeners() {\n        if (this.getFailureNotification !== null) {\n            addEventListener(FAILURE_EVENT_NAME, this.getFailureNotification);\n        }\n        if (this.getSuccessNotification !== null) {\n            addEventListener(SUCCESS_EVENT_NAME, this.getSuccessNotification);\n        }\n        if (this.getStartNotification !== null) {\n            addEventListener(START_EVENT_NAME, this.getStartNotification);\n        }\n        if (this.getFileCommitNotification !== null) {\n            addEventListener(FILE_COMMIT_EVENT_NAME, this.getFileCommitNotification);\n        }\n        if (this.getFileCommitRetryNotification !== null) {\n            addEventListener(FILE_COMMIT_RETRY_EVENT_NAME, this.getFileCommitRetryNotification);\n        }\n        if (this.getCompletedNotification !== null) {\n            addEventListener(COMPLETED_EVENT_NAME, this.getCompletedNotification);\n        }\n        if (this.getIsCancellingNotification !== null) {\n            addEventListener(START_CANCELLING_EVENT_NAME, this.getIsCancellingNotification);\n        }\n        if (this.getIsCancelledNotification !== null) {\n            addEventListener(END_CANCELLING_EVENT_NAME, this.getIsCancelledNotification);\n        }\n        if (this.handleProgressUpdates !== null) {\n            addEventListener(PROGRESS_EVENT_NAME, this.handleProgressUpdates);\n        }\n    }\n\n    removeListeners() {\n        if (this.getFailureNotification !== null) {\n            removeEventListener(FAILURE_EVENT_NAME, this.getFailureNotification);\n        }\n        if (this.getSuccessNotification !== null) {\n            removeEventListener(SUCCESS_EVENT_NAME, this.getSuccessNotification);\n        }\n        if (this.getStartNotification !== null) {\n            removeEventListener(START_EVENT_NAME, this.getStartNotification);\n        }\n        if (this.getFileCommitNotification !== null) {\n            removeEventListener(FILE_COMMIT_EVENT_NAME, this.getFileCommitNotification);\n        }\n        if (this.getFileCommitRetryNotification !== null) {\n            removeEventListener(FILE_COMMIT_RETRY_EVENT_NAME, this.getFileCommitRetryNotification);\n        }\n        if (this.getCompletedNotification !== null) {\n            removeEventListener(COMPLETED_EVENT_NAME, this.getCompletedNotification);\n        }\n        if (this.handleProgressUpdates !== null) {\n            removeEventListener(PROGRESS_EVENT_NAME, this.handleProgressUpdates);\n        }\n        if (this.getIsCancellingNotification !== null) {\n            removeEventListener(START_CANCELLING_EVENT_NAME, this.getCompletedNotification);\n        }\n        if (this.getIsCancelledNotification !== null) {\n            removeEventListener(END_CANCELLING_EVENT_NAME, this.getCompletedNotification);\n        }\n        removeEventListener(ABORT_UPLOAD_EVENT_NAME, this.abortUpload);\n    }\n\n    fireEvent(progress, eventName) {\n        var event = new CustomEvent(\n            eventName,\n            {\n                detail: {\n                    progress: progress\n                },\n                bubbles: true,\n                cancelable: true\n            }\n        );\n        dispatchEvent(event);\n    }\n\n    startSession() {\n        this.addListeners();\n        this.progress.didStart = true;\n        if (this.getStartNotification !== null) {\n            this.fireEvent(this.progress, START_EVENT_NAME);\n        }\n        let options = {};\n        let self = this;\n        options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n        if (self.newVersionFileId) {\n            options.url = `${this.filesManager.UPLOAD_PATH}/files/${self.newVersionFileId}/upload_sessions`;\n            options.body = {\n                file_size: this.file.size,\n                file_name: this.fileName\n            }\n        } else {\n            options.url = `${this.filesManager.UPLOAD_PATH}/files/upload_sessions`;\n            options.body = {\n                folder_id: this.parentFolder.id,\n                file_size: this.file.size,\n                file_name: this.fileName\n            }\n        }\n\n        if (!this.client.httpService.defaults) {\n            options.useXHR = true;\n        }\n        return this.client.makeRequest(null, options)\n            .then(function (resp) {\n                if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                if (resp.data) {\n                    resp = resp.data;\n                }\n                self.session.id = resp.id;\n                self.session.expiresAt = resp.session_expires_at;\n                self.session.partSize = resp.part_size;\n                self.session.totalParts = resp.total_parts;\n                self.session.endpoints.listParts = resp.session_endpoints.list_parts;\n                self.session.endpoints.commit = resp.session_endpoints.commit;\n                self.session.endpoints.uploadPart = resp.session_endpoints.upload_part;\n                self.session.endpoints.status = resp.session_endpoints.status;\n                self.session.endpoints.abort = resp.session_endpoints.abort;\n                self.progress.session = self.session;\n\n                self.makeChunks();\n                return self.processChunks();\n            })\n            .then(function (tasks) {\n                if (self.isCancelled) return;\n                return self.commitUpload();\n            })\n            .then(function (result) {\n                if (self.isCancelled) return;\n                if (self.getFileCommitNotification !== null) {\n                    self.progress.didFileCommit = true;\n                    self.fireEvent(self.progress, FILE_COMMIT_EVENT_NAME);\n                }\n                if (self.getCompletedNotification !== null) {\n                    self.progress.didSucceed = true;\n                    self.progress.isComplete = true;\n                    self.fireEvent(self.progress, COMPLETED_EVENT_NAME);\n                }\n                if (self.getSuccessNotification !== null) {\n                    self.progress.didSucceed = true;\n                    self.progress.isComplete = true;\n                    self.fireEvent(self.progress, SUCCESS_EVENT_NAME);\n                }\n                self.removeListeners();\n                self.session = {};\n                return result;\n            })\n            .catch(function (err) {\n                if (self.getCompletedNotification !== null) {\n                    if (err.message !== \"Upload cancelled\") {\n                        self.progress.didFail = true;\n                        self.progress.isCancelled = true;\n                    }\n                    self.progress.isComplete = true;\n                    self.fireEvent(self.progress, COMPLETED_EVENT_NAME);\n                }\n                if (self.getFailureNotification !== null) {\n                    self.fireEvent(self.progress, FAILURE_EVENT_NAME);\n                }\n                if (!self.isCancelled) {\n                    if (typeof self.abortUpload == \"function\") {\n                        self.abortUpload();\n                    } else {\n                        throw err;\n                    }\n                }\n                throw err;\n            });\n    }\n\n    makeChunks() {\n        let self = this;\n        if (self.isCancelled) throw new Error(\"Upload cancelled\");\n        let totalSize = this.file.size;\n        let position = 0;\n        let part;\n        while (position < totalSize) {\n            if (self.isCancelled) throw new Error(\"Upload cancelled\");\n            let contentRangeLow = position;\n            let contentRangeHigh = position + self.session.partSize - 1;\n            if (contentRangeHigh > totalSize - 1) {\n                contentRangeHigh = totalSize - 1;\n            }\n            part = self.file.slice(position, position + self.session.partSize);\n            self.parts.push({\n                part: part,\n                contentRange: `bytes ${position}-${contentRangeHigh}/${self.file.size}`,\n                digest: \"\",\n                uploaded: false,\n                retry: 0\n            })\n            position += self.session.partSize;\n        }\n    }\n\n    processChunk(part) {\n        let self = this;\n        if (self.isCancelled) throw new Error(\"Upload cancelled\");\n        if (!part.uploaded) {\n            part.retry++;\n            let blob = part.part;\n            return self.filesManager.createSHA1Hash(blob)\n                .then(function (shaObject) {\n                    if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                    self.processedCount++;\n                    if (self.handleProgressUpdates !== null) {\n                        self.progress.percentageProcessed = (self.processedCount / (self.session.totalParts)).toFixed(2);\n                        self.fireEvent(self.progress, PROGRESS_EVENT_NAME);\n                    }\n                    part.digest = shaObject.hash;\n                    self.hash.update(shaObject.arrayBuffer);\n                    let options = {};\n                    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n                    options.url = self.session.endpoints.uploadPart;\n                    options.headers = {\n                        \"Digest\": `sha=${shaObject.hash}`,\n                        \"Content-Range\": part.contentRange,\n                        \"Content-Type\": \"application/octet-stream\"\n                    };\n                    options.body = part.part;\n                    options.chunkedUpload = true;\n                    options.returnsOnlyOptions = true;\n                    if (!self.client.makeRequest(null, options).then) {\n                        return new Promise(function (resolve, reject) {\n                            try {\n                                resolve(self.client.makeRequest(null, options));\n                            } catch (e) {\n                                reject(e);\n                            }\n                        })\n                    } else {\n                        return self.client.makeRequest(null, options);\n                    }\n                })\n                .then(function (opts) {\n                    opts.includeFullResponse = true;\n                    if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                    if (self.filesManager.client.httpService.defaults && self.filesManager.client.Promise.defer) {\n                        let canceller = self.filesManager.client.Promise.defer();\n                        let cancel = function (reason) {\n                            canceller.resolve(reason);\n                        };\n                        self.partRequestCancellations.push({ abort: cancel });\n                        return self.filesManager.client.httpService.put(opts.url, opts.body, {\n                            headers: opts.headers,\n                            timeout: canceller.promise\n                        });\n                    } else {\n                        opts.useXHR = true;\n                        opts.returnCancelToken = true;\n                        let request = self.filesManager.client.httpService(opts);\n                        self.partRequestCancellations.push({ abort: request.abort });\n                        return request.promise;\n                    }\n                })\n                .catch(function (e) {\n                    if (e && e.status && e.status !== 416 && !self.isCancelled) {\n                        if (part.retry < 2) {\n                            return self.processChunk(part);\n                        }\n                    } else {\n                        throw e;\n                    }\n                })\n                .then(function (resp) {\n                    if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                    self.uploadCount++;\n                    if (self.handleProgressUpdates !== null) {\n                        self.progress.percentageUploaded = (self.uploadCount / (self.session.totalParts)).toFixed(2);\n                        self.fireEvent(self.progress, PROGRESS_EVENT_NAME);\n                    }\n                    if (resp.data) {\n                        resp = resp.data;\n                    }\n                    part.response = resp;\n                    part.uploaded = true;\n                });\n        } else {\n            return new Promise.resolve();\n        }\n    }\n\n    processChunks() {\n        let self = this;\n        if (self.isCancelled) throw new Error(\"Upload cancelled\");\n        this.parts.forEach(function (part) {\n            if (self.isCancelled) throw new Error(\"Upload cancelled\");\n            self.tasks.push(self.processChunk(part));\n        });\n        return Promise.all(self.tasks);\n    }\n\n    commitUpload(calculatedHash, preorderedParts) {\n        return new Promise((resolve, reject) => {\n            let self = this;\n\n            if (self.isCancelled) throw new Error(\"Upload cancelled\");\n            let orderedParts = [];\n            let hash = '';\n            if (calculatedHash) {\n                hash = calculatedHash;\n            } else {\n                const digest = self.hash.digest();\n                hash = Base64ArrayBuffer(digest);\n            }\n            if (preorderedParts) {\n                orderedParts = preorderedParts\n            } else {\n                self.finishedUploading = true;\n                this.parts.forEach(function (part) {\n                    if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                    if (part.uploaded === false) {\n                        self.finishedUploading = false;\n                        self.abortUpload();\n                    }\n                });\n                self.parts.forEach(function (part) {\n                    if (!part || !part.response || !part.response.part) {\n                        self.abortUpload();\n                    }\n                    orderedParts.push(part.response.part);\n                });\n            }\n            let options = {};\n            options.chunkedUpload = true;\n            options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n            options.url = self.session.endpoints.commit;\n            options.headers = {\n                \"Digest\": `sha=${hash}`\n            };\n            options.body = JSON.stringify({\n                parts: orderedParts\n            });\n            options.includeFullResponse = true;\n            options.useXHR = true;\n            return self.client.makeRequest(null, options)\n                .then(function (resp) {\n                    if (resp.status && resp.status == 202) {\n                        if (self.isCancelled) throw new Error(\"Upload cancelled\");\n                        let retrySeconds;\n                        if (resp && resp.headers && typeof resp.headers === \"function\") {\n                            retrySeconds = resp.headers()[\"retry-after\"];\n                        } else if (resp && resp.headers && resp.headers[\"retry-after\"]) {\n                            retrySeconds = resp.headers[\"retry-after\"];\n                        } else {\n                            retrySeconds = 30;\n                        }\n                        retrySeconds *= 1000;\n                        return new Promise((resolve, reject) => {\n                            self.delay(retrySeconds)\n                                .then(() => resolve(self.commitUpload(hash, orderedParts)))\n                        });\n                    } else {\n                        return Promise.resolve(resp);\n                    }\n                })\n                .then((resp) => resolve(resp));\n        })\n    }\n\n    delay(t) {\n        let self = this;\n        if (self.getFileCommitRetryNotification !== null) {\n            self.progress.fileCommitRetryTime = t / 1000;\n            self.fireEvent(self.progress, FILE_COMMIT_RETRY_EVENT_NAME);\n        }\n        return new Promise(function (resolve) {\n            self.retryCommitTimer = setTimeout(resolve, t);\n        });\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/managers/chunked-uploader.js","// 'use strict';\nimport Rusha from 'rusha';\nimport Base64ArrayBuffer from './base64-array-buffer'\nimport CheckForFileReader from './check-for-file-reader';\nexport default (blob) => {\n    return new Promise((resolve, reject) => {\n        if (!CheckForFileReader()) reject(new Error(\"FileReader isn't usable in this browser.\"));\n        try {\n            let reader = new FileReader();\n            reader.onload = (evt) => {\n                if (!evt || !evt.target || !evt.target.result) {\n                    reject();\n                    return;\n                }\n                var rusha = new Rusha();\n                resolve({\n                    hash: Base64ArrayBuffer(rusha.rawDigest(evt.target.result).buffer),\n                    arrayBuffer: evt.target.result\n                });\n\n            };\n            reader.readAsArrayBuffer(blob);\n        } catch (e) {\n            reject(e);\n        }\n    });\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/generate-sha1.js","// 'use strict';\nimport Rusha from 'rusha';\nimport CheckForFileReader from './check-for-file-reader';\nexport default (blob) => {\n    return new Promise((resolve, reject) => {\n        if (!CheckForFileReader()) reject(new Error(\"FileReader isn't usable in this browser.\"));\n        try {\n            let reader = new FileReader();\n            reader.onload = (evt) => {\n                if (!evt || !evt.target || !evt.target.result) {\n                    reject();\n                    return;\n                }\n                var rusha = new Rusha();\n                resolve((rusha.digestFromBuffer(evt.target.result)));\n\n            };\n            reader.readAsArrayBuffer(blob);\n        } catch (e) {\n            reject(e);\n        }\n    });\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/generate-md5.js","'use strict';\nexport default () => {\n  return ((window && window.FormData) || FormData) ? true : false;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/util/check-for-form-data.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport CreateRequestBody from '../util/create-request-body';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport Manager from './manager';\n\nconst BASE_PATH = '/web_links';\nconst MODEL_VALUES = {\n  URL: 'url',\n  PARENT: 'parent',\n  ID: 'parent.id',\n  NAME: 'name',\n  DESCRIPTION: 'description'\n}\n\nexport default class WebLinks extends Manager {\n  constructor(client) {\n    super(MODEL_VALUES);\n    this.client = client;\n  }\n\n  _getWebLinkId(options) {\n    let id = super._getId(options);\n\n    if (options.webLink) {\n      options.web_link = options.webLink;\n      delete options.webLink;\n    }\n\n    if (options.web_link && options.web_link.id) {\n      id = options.web_link.id;\n    } else if (options.webLinkId || options.web_link_id) {\n      id = options.webLinkId || options.web_link_id;\n      (options.webLinkId) ? delete options.webLinkId : delete options.web_link_id;\n    } \n    super._testForMissingId(id);\n    return id;\n  }\n\n  _getWebLink(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n\n    if (options.webLink) {\n      options.web_link = options.webLink;\n      delete options.webLink;\n    }\n\n    if (options.web_link) {\n      if (!skipValidation) { VerifyRequiredValues(options.webLink, values) };\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.webLink, this.FLATTENED_VALUES) };\n      options.body = CreateRequestBody(options.webLink, this.ALL_VALUES);\n      delete options.web_link;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let webLinkId = this._getWebLinkId(options);\n    let apiPath = `${BASE_PATH}/${webLinkId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  create(options) {\n    options = options || {};\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [ALL_VALUES.URL, ALL_VALUES.PARENT, ALL_VALUES.ID];\n      let skipValidation = InvestigateModes(options, BOX_CONSTANTS.MODES.SKIP_VALIDATION) || false;\n      let ignoreModelValues = InvestigateModes(options, BOX_CONSTANTS.MODES.IGNORE_MODEL_VALUES) || false;\n\n      if (!this.client._returnsOnlyOptions) {\n        this._getWebLink(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n      }\n    }\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  update(options) {\n    options = options || {};\n    let webLinkId = this._getWebLinkId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = InvestigateModes(options, BOX_CONSTANTS.MODES.SKIP_VALIDATION) || false;\n      let ignoreModelValues = InvestigateModes(options, BOX_CONSTANTS.MODES.IGNORE_MODEL_VALUES) || false;\n\n      this._getWebLink(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${webLinkId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  delete(options) {\n    options = options || {};\n    let webLinkId = this._getWebLinkId(options);\n    let apiPath = `${BASE_PATH}/${webLinkId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/web-links.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport Manager from './manager';\n\nconst BASE_PATH = '/collaborations';\nconst MODEL_VALUES = {\n  NOTIFY: 'notify',\n  ITEM: 'item',\n  ITEM_TYPE: 'item.type',\n  ITEM_ID: 'item.id',\n  ACCESSIBLE_BY: 'accessible_by',\n  ACCESSIBLE_BY_ID: 'accessible_by.id',\n  ACCESSIBLE_BY_TYPE: 'accessible_by.type',\n  ACCESSIBLE_BY_LOGIN: 'accessible_by.login',\n  ROLE: 'role'\n};\n\n\nexport default class Collaborations extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  _getCollaborationId(options) {\n    let id = super._getId(options);\n    if (options.collaborationId || options.collaboration_id) {\n      id = options.collaborationId || options.collaboration_id;\n      (options.collaborationId) ? delete options.collaborationId : delete options.collaboration_id;\n    } else if (options.collaboration && options.collaboration.id) {\n      id = options.collaboration.id;\n    }\n    super._testForMissingId(id);\n    return id;\n  }\n\n  _getCollaboration(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n    if (options.collaboration) {\n      if (!skipValidation) { super.VerifyRequiredValues(options.collaboration, values) };\n      if (!ignoreModelValues) { super.NormalizeObjectKeys(options.collaboration, this.FLATTENED_VALUES); }\n      options.body = super.CreateRequestBody(options.comment, this.ALL_VALUES, ignoreModelValues);\n      delete options.collaboration;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let collaborationId = this._getCollaborationId(options);\n    let apiPath = `${BASE_PATH}/${collaborationId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  create(options) {\n    options = options || {};\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [MODEL_VALUES.ITEM, MODEL_VALUES.ITEM_ID, MODEL_VALUES.ITEM_TYPE, MODEL_VALUES.ACCESSIBLE_BY, MODEL_VALUES.ROLE];\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getCollaboration(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  update(options) {\n    options = options || {};\n    let collaborationId = this._getCollaborationId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getCollaboration(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${collaborationId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  delete(options) {\n    options = options || {};\n    let collaborationId = this._getCollaborationId(options);\n    let apiPath = `${BASE_PATH}/${collaborationId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/collaborations.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport Manager from './manager';\n\nconst BASE_PATH = '/collections';\nconst MODEL_VALUES = {};\n\nexport default class Collections extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  _getCollectionId(options) {\n    let id = super._getId(options);\n    if (options.collectionId || options.collection_id) {\n      id = options.collectionId || options.collection_id;\n      (options.collectionId) ? delete options.collectionId : delete options.collection_id;\n    } else if (options.collection && options.collection.id) {\n      id = options.collection.id;\n    }\n    super._testForMissingId(id);\n    return id;\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let collectionId = this._getCollectionId(options);\n    let apiPath = `${BASE_PATH}/${collectionId}/items`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getAll(options) {\n    options = options || {};\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/managers/collections.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport Manager from './manager';\n\nconst BASE_PATH = '/comments';\nconst MODEL_VALUES = {\n  ITEM: 'item',\n  ITEM_TYPE: 'item.type',\n  ITEM_ID: 'item.id',\n  TAGGED_MESSAGE: 'tagged_message',\n  MESSAGE: 'message'\n}\n\nexport default class Comments extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  _getCommentId(options) {\n    let id = super._getId(options);\n    if (options.commentId || options.comment_id) {\n      id = options.commentId || options.comment_id;\n      (options.commentId) ? delete options.commentId : delete options.comment_id;\n    } else if (options.comment && options.comment.id) {\n      id = options.comment.id;\n    }\n    super._testForMissingId(id, BOX_CONSTANTS.COMMENT, BOX_CONSTANTS.COMMENT_ID);\n    return id;\n  }\n\n  _getComment(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n    if (options.comment) {\n      if (!skipValidation) { super.VerifyRequiredValues(options.comment, values) };\n      if (!ignoreModelValues) { super.NormalizeObjectKeys(options.comment, this.FLATTENED_VALUES); }\n      options.body = super.CreateRequestBody(options.comment, this.ALL_VALUES, ignoreModelValues);\n      delete options.comment;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let commentId = this._getCommentId(options);\n    let apiPath = `${BASE_PATH}/${commentId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  create(options) {\n    options = options || {};\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [MODEL_VALUES.ITEM, MODEL_VALUES.ITEM_ID, MODEL_VALUES.ITEM_TYPE, MODEL_VALUES.MESSAGE];\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getComment(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  update(options) {\n    options = options || {};\n    let commentId = this._getCommentId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getComment(options, [MODEL_VALUES.MESSAGE], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${commentId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  delete(options) {\n    options = super._objectifyString(options) || {};\n    let commentId = this._getCommentId(options);\n    let apiPath = `${BASE_PATH}/${commentId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/comments.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport Manager from './manager';\n\nconst BASE_PATH = '/groups';\nconst BASE_MEMBERSHIP_PATH = '/group_memberships'\nconst MODEL_VALUES = {\n  NAME: 'name',\n  PROVENANCE: 'provenance',\n  EXTERNAL_SYNC_IDENTIFIER: 'external_sync_identifier',\n  DESCRIPTION: 'description',\n  INVITABILITY_LEVEL: 'invitability_level',\n  MEMBER_VIEWABILITY_LEVEL: 'member_viewability_level',\n  USER: 'user',\n  USER_ID: 'user.id',\n  GROUP: 'group',\n  GROUP_ID: 'group.id',\n  ROLE: 'role'\n}\n\nexport default class Groups extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  _getGroupId(options) {\n    let id = super._getId(options);\n    if (options.groupId || options.group_id) {\n      id = options.groupId || options.group_id;\n      (options.groupId) ? delete options.groupId : delete options.group_id;\n    } else if (options.group && options.group.id) {\n      id = options.group.id;\n    }\n    super._testForMissingId(id);\n    return id;\n  }\n\n  _getGroupMembershipId(options) {\n    let id = super._getId(options);\n    if (options.groupMembershipId || options.group_membership_id) {\n      id = options.groupMembershipId || options.group_membership_id;\n      (options.groupMembershipId) ? delete options.groupMembershipId : delete options.group_membership_id;\n    } else if ((options.groupMembership && options.groupMembership.id) || (options.group_membership && options.group_membership.id)) {\n      id = options.groupMembership.id || options.group_membership.id;\n    }\n    super._testForMissingId(id);\n    return id;\n  }\n\n  _getGroup(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n    if (options.group) {\n      if (!skipValidation) { VerifyRequiredValues(options.group, values) };\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.group, this.FLATTENED_VALUES); }\n      options.body = CreateRequestBody(options.group, this.ALL_VALUES, ignoreModelValues);\n      delete options.group;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  _getGroupMembership(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n\n    if (options.groupMembership) {\n      options.group_membership = options.groupMembership;\n      delete options.groupMembership;\n    }\n\n    if (options.group_membership) {\n      if (!skipValidation) { VerifyRequiredValues(options.group_membership, values) }\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.group_membership, this.FLATTENED_VALUES); }\n      options.body = CreateRequestBody(options.group_membership, this.ALL_VALUES, ignoreModelValues);\n      delete options.group_membership;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let groupId = this._getGroupId(options);\n    let apiPath = `${BASE_PATH}/${groupId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getAll(options) {\n    options = options || {};\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  update(options) {\n    options = options || {};\n    let groupId = this._getGroupId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getGroup(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${groupId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getMembership(options) {\n    options = super._objectifyString(options) || {};\n    let groupMembershipId = this._getGroupMembershipId(options);\n    let apiPath = `${BASE_MEMBERSHIP_PATH}/${groupMembershipId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  updateMembership(options) {\n    options = options || {};\n    let groupMembershipId = this._getGroupMembershipId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getGroupMembership(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_MEMBERSHIP_PATH}/${groupMembershipId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  deleteMembership(options) {\n    options = options || {};\n    let groupMembershipId = this._getGroupMembershipId(options);\n    let apiPath = `${BASE_MEMBERSHIP_PATH}/${groupMembershipId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getMembershipsForGroup(options) {\n    options = options || {};\n    let groupId = this._getGroupId(options);\n    let apiPath = `${BASE_PATH}/${groupId}/memberships`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getCollaborationsForGroup(options) {\n    options = options || {};\n    let groupId = this._getGroupId(options);\n    let apiPath = `${BASE_PATH}/${groupId}/collaborations`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/groups.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport CreateRequestBody from '../util/create-request-body';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport Manager from './manager';\n\nconst BASE_PATH = '/metadata_templates';\nconst BASE_PATH_FOLDER_METADATA = '/folders'\nconst BASE_PATH_FILE_METADATA = '/files'\nconst MODEL_VALUES = {}\n\nexport default class Metadata extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  get(options) {\n    options = options || {};\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n    let apiPath = `${BASE_PATH}/${scope}/${templateKey}/schema`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getTemplates(options) {\n    options = options || {};\n    let scope = super._getScope(options);\n    let apiPath = `${BASE_PATH}/${scope}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getFolderMetadata(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FOLDER_METADATA}/${folderId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getAllFolderMetadata(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n\n    let apiPath = `${BASE_PATH_FOLDER_METADATA}/${folderId}/metadata`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getFileMetadata(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FILE_METADATA}/${fileId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getAllFileMetadata(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n\n    let apiPath = `${BASE_PATH_FILE_METADATA}/${fileId}/metadata`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  createFolderMetadata(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FOLDER_METADATA}/${folderId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    options.headers = options.headers || {};\n    options.headers['Content-Type'] = \"application/json\";\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  createFileMetadata(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FILE_METADATA}/${fileId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    options.headers = options.headers || {};\n    options.headers['Content-Type'] = \"application/json\";\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  updateFileMetadata(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FILE_METADATA}/${fileId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    options.headers = options.headers || {};\n    options.headers['Content-Type'] = \"application/json-patch+json\";\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  updateFolderMetadata(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FOLDER_METADATA}/${folderId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    options.headers = options.headers || {};\n    options.headers['Content-Type'] = \"application/json-patch+json\";\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  deleteFolderMetadata(options) {\n    options = options || {};\n    let folderId = super._getFolderId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FOLDER_METADATA}/${folderId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  deleteFileMetadata(options) {\n    options = options || {};\n    let fileId = super._getFileId(options);\n    let scope = super._getScope(options);\n    let templateKey = super._getTemplateKey(options);\n\n    let apiPath = `${BASE_PATH_FILE_METADATA}/${fileId}/metadata/${scope}/${templateKey}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/managers/metadata.js","\nimport Manager from './manager';\nimport BOX_CONSTANTS from '../config/box-constants';\n\nconst BASE_PATH = '/search';\nconst MODEL_VALUES = {};\n\nexport default class Search extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  _objectifyStringWithQuery(options) {\n    if (typeof options === 'string') {\n      let query = options;\n      options = { query: query };\n    }\n    return options;\n  }\n\n  _getQuery(options) {\n    let queryFormat = 'query';\n    let query = '';\n    if (options.query || options.params.query) {\n      options.params = options.params || {};\n      query = options.query || options.params.query;\n      if (options.query) { delete options.query; }\n      options.params.query = query;\n    } else {\n      throw new Error(`An ${queryFormat} field is required for this API call. Please provide an object with a key formatted in this style: ${queryFormat}`);\n    }\n    return options;\n  }\n\n  search(options) {\n    options = this._objectifyStringWithQuery(options) || {};\n    options = this._getQuery(options);\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/search.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport CreateRequestBody from '../util/create-request-body';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport Manager from './manager';\n\nconst BASE_PATH = '/tasks';\nconst BASE_TASK_ASSIGNMENT_PATH = '/task_assignments';\nconst MODEL_VALUES = {\n  TASK: 'task',\n  TASK_TYPE: 'task.type',\n  TASK_ID: 'task.id',\n  ASSIGN_TO: 'assign_to',\n  ASSIGN_TO_ID: 'assign_to.id',\n  ASSIGN_TO_LOGIN: 'assign_to.login',\n  RESOLUTION_STATE: 'resolution_state',\n  ITEM: 'item',\n  ITEM_TYPE: 'item.type',\n  ITEM_ID: 'item.id',\n  ACTION: 'action',\n  MESSAGE: 'message',\n  DUE_AT: 'due_at'\n}\n\nexport default class Tasks extends Manager {\n  constructor(client) {\n    super(MODEL_VALUES);\n    this.client = client;\n  }\n\n  _getTaskId(options) {\n    let id = super._getId(options);\n    if (options.taskId || options.task_id) {\n      id = options.taskId || options.task_id;\n      (options.taskId) ? delete options.taskId : delete options.task_id;\n    } else if (options.task && options.task.id) {\n      id = options.task.id;\n    }\n    super._testForMissingId(id);\n    return id;\n  }\n\n  _getTaskAssignmentId(options) {\n    let id = super._getId(options);\n\n    if (options.taskAssignment) {\n      options.task_assignment = options.taskAssignment;\n      delete options.taskAssignment;\n    }\n\n    if (options.taskAssignmentId || options.task_assignment_id) {\n      id = options.taskId || options.task_id;\n      (options.taskId) ? delete options.taskId : delete options.task_id;\n    } else if (options.task_assignment && options.task_assignment.id) {\n      id = options.task_assignment.id;\n    }\n    super._testForMissingId(id);\n    return id;\n  }\n\n  _getTask(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n    if (options.task) {\n      if (!skipValidation) { VerifyRequiredValues(options.task, values) };\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.task, this.FLATTENED_VALUES); }\n      options.body = CreateRequestBody(options.task, this.ALL_VALUES, ignoreModelValues);\n      delete options.task;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  _getTaskAssignment(options, values, skipValidation, ignoreModelValues) {\n    skipValidation = skipValidation || this.client.skipValidation || false;\n    ignoreModelValues = ignoreModelValues || false;\n\n    if (options.taskAssignment) {\n      options.task_assignment = options.taskAssignment;\n      delete options.taskAssignment;\n    }\n\n    if (options.task_assignment) {\n      if (!skipValidation) { VerifyRequiredValues(options.task_assignment, values) }\n      if (!ignoreModelValues) { NormalizeObjectKeys(options.task_assignment, this.FLATTENED_VALUES); }\n      options.body = CreateRequestBody(options.task_assignment, this.ALL_VALUES, ignoreModelValues);\n      delete options.task_assignment;\n    } else {\n      super._getModel(options, values, skipValidation, ignoreModelValues);\n    }\n  }\n\n  get(options) {\n    options = super._objectifyString(options) || {};\n    let taskId = this._getTaskId(options);\n    let apiPath = `${BASE_PATH}/${taskId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  create(options) {\n    options = options || {};\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [MODEL_VALUES.ITEM, MODEL_VALUES.ITEM_ID, MODEL_VALUES.ITEM_TYPE];\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getTask(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  update(options) {\n    options = options || {};\n    let taskId = this._getTaskId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getTask(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_PATH}/${taskId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  delete(options) {\n    options = options || {};\n    let taskId = this._getTaskId(options);\n    let apiPath = `${BASE_PATH}/${taskId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getTaskAssignment(options) {\n    options = super._objectifyString(options) || {};\n    let taskAssignmentId = this._getTaskAssignmentId(options);\n    let apiPath = `${BASE_TASK_ASSIGNMENT_PATH}/${taskAssignmentId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getTaskAssignments(options) {\n    options = options || {};\n    let taskId = this._getTaskId(options);\n    let apiPath = `${BASE_PATH}/${taskId}/assignments`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  createTaskAssignment(options) {\n    options = options || {};\n    if (!this.client._simpleMode) {\n      const REQUIRED_VALUES = [MODEL_VALUES.TASK, MODEL_VALUES.TASK_TYPE, MODEL_VALUES.TASK_ID, MODEL_VALUES.ASSIGN_TO];\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getTaskAssignment(options, REQUIRED_VALUES, skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_TASK_ASSIGNMENT_PATH}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.POST;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  updateTaskAssignment(options) {\n    options = options || {};\n    let taskAssignmentId = this._getTaskAssignmentId(options);\n    if (!this.client._simpleMode) {\n      let skipValidation = super._setSkipValidation(options);\n      let ignoreModelValues = super._setIgnoreModelValues(options);\n\n      this._getTaskAssignment(options, [], skipValidation, ignoreModelValues);\n    }\n    let apiPath = `${BASE_TASK_ASSIGNMENT_PATH}/${taskAssignmentId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.PUT;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  deleteTaskAssignment(options) {\n    options = options || {};\n    let taskAssignmentId = this._getTaskAssignmentId(options);\n    let apiPath = `${BASE_TASK_ASSIGNMENT_PATH}/${taskAssignmentId}`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.DELETE;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/managers/tasks.js","'use strict';\nimport BOX_CONSTANTS from '../config/box-constants';\nimport VerifyRequiredValues from '../util/verify-required-values';\nimport NormalizeObjectKeys from '../util/normalize-object-keys';\nimport Manager from './manager';\n\nconst BASE_PATH = '/users';\nconst MODEL_VALUES = {}\n\nexport default class Users extends Manager {\n  constructor(client) {\n    super(client, MODEL_VALUES);\n  }\n\n  getCurrentUser(options) {\n    options = options || {};\n    let apiPath = `${BASE_PATH}/me`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n\n  getGroupMemberships(options) {\n    options = options || {};\n    let apiPath = `${BASE_PATH}/${userId}/memberships`;\n    options.method = BOX_CONSTANTS.HTTP_VERBS.GET;\n    return this.client.makeRequest(apiPath, options);\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/managers/users.js","'use strict';\nimport BaseBoxClient from './base-box-client';\nimport BOX_CONSTANTS from './config/box-constants';\n\nexport default class PersistentBoxClient extends BaseBoxClient {\n  constructor(config) {\n    config = config || {};\n    super(config);\n    this._tokenExpirationTime = config.tokenExpirationTime || 2700000;\n    this.accessTokenHandler = this._checkConfigForAccessTokenHandler(config);\n    this.accessTokenStore = this._defaultAccessTokenStore();\n    this.storage = config.storage || \"localStorage\";\n    this.disableStorage = config.disableStorage || false;\n    this.isCallback = config.isCallback || false;\n    this.isPromise = config.isPromise || true;\n    this.requestRetryTimes = config.retryTimes || 3;\n    this.supportsStorage = this._storageAvailable(this.storage);\n    this.suppressExpiration = config.suppressExpiration || false;\n  }\n\n  _checkConfigForAccessTokenHandler(config) {\n    if (typeof config === \"object\" && (config.accessTokenHandler || config.access_token_handler)) {\n      config.accessTokenObject = config.accessTokenHandler || config.access_token_handler;\n      return config.accessTokenObject;\n    } else {\n      throw new Error(\"An accessTokenHandler is required to create a PersisentBoxClient. Please provide a callback function or promise that resolves to an access token\");\n    }\n  }\n\n  _storageAvailable(type) {\n    try {\n      var storage = window[type],\n        x = '__storage_test__';\n      storage.setItem(x, x);\n      storage.removeItem(x);\n      return true;\n    }\n    catch (e) {\n      return false;\n    }\n  }\n\n  _verifyAccessTokenObject(accessTokenObject) {\n    let verifiedAccessTokenObject = {};\n    if (typeof accessTokenObject === \"string\") {\n      verifiedAccessTokenObject.accessToken = accessTokenObject;\n      if (!this.suppressExpiration) {\n        verifiedAccessTokenObject.expiresAt = this._calculateTokenExpiration();\n      }\n      return verifiedAccessTokenObject;\n    }\n    if (typeof accessTokenObject === \"object\" && (accessTokenObject.accessToken || accessTokenObject.access_token)) {\n      verifiedAccessTokenObject.accessToken = accessTokenObject.accessToken || accessTokenObject.access_token;\n    }\n    if (typeof accessTokenObject === \"object\" && !this.suppressExpiration && (accessTokenObject.expiresAt || accessTokenObject.expires_at)) {\n      verifiedAccessTokenObject.expiresAt = accessTokenObject.expiresAt || accessTokenObject.expires_at;\n    }\n    if (!this.suppressExpiration && !verifiedAccessTokenObject.expiresAt) {\n      verifiedAccessTokenObject.expiresAt = this._calculateTokenExpiration();\n    }\n    return verifiedAccessTokenObject;\n  }\n\n  _calculateTokenExpiration() {\n    return Date.now() + this._tokenExpirationTime;\n  }\n\n  _promisifyAccessTokenHandler(accessTokenHandler) {\n    if (typeof accessTokenHandler === 'function' && this.isCallback) {\n      return new this.Promise((resolve, reject) => {\n        accessTokenHandler((err, token) => {\n          if (err) { reject(err); }\n          if (token) {\n            resolve(token);\n          } else {\n            reject(\"Couldn't retrieve a new token.\");\n          }\n        });\n      });\n    } else if (typeof accessTokenHandler === 'function' && this.isPromise) {\n      let isAccessTokenHandlerAPromise = accessTokenHandler();\n      if (typeof isAccessTokenHandlerAPromise === 'object' && 'then' in isAccessTokenHandlerAPromise) {\n        return isAccessTokenHandlerAPromise;\n      } else {\n        throw new Error(\"accessTokenHandler must resolve to a function or promise\");\n      }\n    } else {\n      throw new Error(\"accessTokenHandler must resolve to a function or promise\");\n    }\n  }\n\n  _defaultAccessTokenStore() {\n    this._accessToken = () => {\n      if (this.supportsStorage && !this.disableStorage) {\n        return new this.Promise((resolve, reject) => {\n          return this._promisifyAccessTokenHandler(this.accessTokenHandler)\n            .then((token) => {\n              token = this._verifyAccessTokenObject(token);\n              window[this.storage].setItem(BOX_CONSTANTS.BOX_TOKEN_STORAGE_KEY, JSON.stringify(token));\n              resolve(token);\n            });\n        });\n      } else {\n        return new this.Promise((resolve, reject) => {\n          return this._promisifyAccessTokenHandler(this.accessTokenHandler)\n            .then((token) => {\n              token = this._verifyAccessTokenObject(token)\n              resolve(token);\n            });\n        });\n      }\n    }\n\n    return {\n      accessToken: this._accessToken\n    }\n  }\n\n  _isExpired(token) {\n    let expiresAt = token.expires_at || token.expiresAt;\n    return (expiresAt < Date.now()) ? true : false;\n  }\n\n  retrieveToken(requestRetryCount) {\n    if (this.supportsStorage && !this.disableStorage) {\n      let boxToken = window[this.storage].getItem(BOX_CONSTANTS.BOX_TOKEN_STORAGE_KEY);\n      boxToken = (boxToken) ? JSON.parse(boxToken) : null;\n      if (boxToken && !this._isExpired(boxToken) && requestRetryCount === 0) {\n        return new this.Promise((resolve, reject) => { resolve(boxToken) });\n      } else {\n        window[this.storage].removeItem(BOX_CONSTANTS.BOX_TOKEN_STORAGE_KEY);\n        return this.accessTokenStore.accessToken();\n      }\n    } else {\n      return this.accessTokenStore.accessToken();\n    }\n  }\n\n  reauth(path, options, requestRetryCount) {\n    return this.retrieveToken(requestRetryCount)\n      .then((token) => {\n        let headers = options.headers || {};\n        headers[BOX_CONSTANTS.HEADER_AUTHORIZATION] = `Bearer ${token.accessToken}`;\n        options = options || {};\n        let compiledOptions = Object.assign({}, options);\n        compiledOptions.url = options.url || `${this._baseApiUrl}${path}`;\n        compiledOptions.headers = headers;\n        compiledOptions.params = this._applyFields(options);\n        this._checkForEmptyObjects(compiledOptions);\n        compiledOptions = this._formatOptions(compiledOptions);\n        return compiledOptions;\n      });\n\n  }\n\n  makeRequest(path, options, requestRetryCount) {\n    requestRetryCount = requestRetryCount || 0;\n    if (requestRetryCount > this.requestRetryTimes) {\n      throw new Error(\"Exceeded retry count.\");\n    }\n    return this.reauth(path, options, requestRetryCount)\n      .then((compiledOptions) => {\n        if (this._returnsOnlyOptions || options.returnsOnlyOptions) {\n          if (compiledOptions.upload) {\n            compiledOptions.headers[\"Content-Type\"] = undefined;\n            delete compiledOptions.upload;\n          }\n          return compiledOptions;\n        } else if (this.httpService.defaults && options.upload) {\n          return this._handleAngularFileUpload(this.httpService, compiledOptions);\n        } else {\n          return this.httpService(compiledOptions)\n            .catch((err) => {\n              var status = err.status || err.response.status;\n              if (status === undefined || status <= 0) {\n                if (this.supportsStorage && !this.disableStorage) {\n                  window[this.storage].removeItem(BOX_CONSTANTS.BOX_TOKEN_STORAGE_KEY);\n                }\n                return this.makeRequest(path, options, requestRetryCount + 1);\n              } else {\n                throw err;\n              }\n            });\n        }\n      });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/persistent-box-client.js"],"sourceRoot":""}