/*** Generated by streamline 0.10.17 (callbacks) - DO NOT EDIT ***/ var __rt=require('streamline/lib/callbacks/runtime').runtime(__filename, false),__func=__rt.__func,__cb=__rt.__cb,__catch=__rt.__catch,__tryCatch=__rt.__tryCatch; var storage = require("azure-storage");
















var StorageUtil = require("../../util/storage.util");
var util = require("util");
var pathUtil = require("path");
var fs = require("fs");
var utils = require("../../util/utils");
var validation = require("../../util/validation");
var commander = require("commander");
var performStorageOperation = StorageUtil.performStorageOperation;
var startProgress = StorageUtil.startProgress;
var endProgress = StorageUtil.endProgress;
var SpeedSummary = storage.BlobService.SpeedSummary;

var __ = require("underscore");
var $ = utils.getLocaleString;




commander.Command.prototype.addStorageAccountOption = function() {
  this.option("-a, --account-name <accountName>", $("the storage account name"));
  this.option("-k, --account-key <accountKey>", $("the storage account key"));
  this.option("-c, --connection-string <connectionString>", $("the storage connection string"));
  this.option("-vv", $("run storage command in debug mode"));
  return this;};





exports.init = function(cli) {


  StorageUtil.init(cli);




  var storage = cli.category("storage").description($("Commands to manage your Storage objects"));


  var logger = cli.output;

  var interaction = cli.interaction;

  var share = storage.category("share").description($("Commands to manage your Storage file shares"));


  share.command("create [share]").description($("Create a storage file share")).option("--share <share>", $("the storage file share name")).option("--quota <quota>", $("the storage file share quota (in GB)")).addStorageAccountOption().execute(createShare);






  share.command("show [share]").description($("Show details of the storage file share")).option("--share <share>", $("the storage file share name")).addStorageAccountOption().execute(showShare);





  share.command("set [share]").description($("Set properties of the storage file share")).option("--share <share>", $("the storage file share name")).option("--quota <quota>", $("the storage file share quota (in GB)")).addStorageAccountOption().execute(setShare);






  share.command("delete [share]").description($("Delete the specified storage file share")).option("--share <share>", $("the storage file share name")).option("-q, --quiet", $("remove the specified storage file share without confirmation")).addStorageAccountOption().execute(deleteShare);






  share.command("list [prefix]").description($("List storage shares with prefix")).option("-p, --prefix <prefix>", $("the storage share name prefix")).addStorageAccountOption().execute(listShares);





  var shareSas = share.category("sas").description($("Commands to manage shared access signatures of your Storage file shares"));


  shareSas.command("create [share] [permissions] [expiry]").description($("Generate shared access signature of storage share")).option("--share <share>", $("the storage share name")).option("--permissions <permissions>", $("the operation permissions combining symbols of r(Read)/w(Write)/d(Delete)/l(List)")).option("--protocol <protocol>", $("the protocol permitted for a request made with the SAS. Possible values are HttpsOnly and HttpsOrHttp")).option("--ip-range <ipRange>", $("an IP address or a range of IP addresses from which to accept requests. When specifying a range of IP addresses, note that the range is inclusive. For example, specifying 168.1.5.65 or 168.1.5.60-168.1.5.70 on the SAS restricts the request to those IP addresses.")).option("--start <start>", $("the UTC time at which the SAS becomes valid")).option("--expiry <expiry>", $("the UTC time at which the SAS expires")).option("--policy <policy>", $("the stored access policy identifier")).addStorageAccountOption().execute(createShareSas);











  var policy = share.category("policy").description($("Commands to manage stored access policies of your Storage file share"));


  policy.command("create [share] [name]").usage("[options] [share] [name]").description($("Create a stored access policy on the share")).option("--share <share>", $("the storage share name")).option("--name <name>", $("the policy name")).option("--start <start>", $("the UTC time at which the policy becomes valid")).option("--expiry <expiry>", $("the UTC time at which the policy expires")).option("--permissions <permissions>", $("the operation permissions combining symbols of r(Read)/w(Write)/d(Delete)/l(List)")).addStorageAccountOption().execute(createSharePolicy);










  policy.command("show [share] [name]").usage("[options] [share] [name]").description($("Show a stored access policy on the share")).option("--share <share>", $("the storage share name")).option("--name <name>", $("the policy name")).addStorageAccountOption().execute(showSharePolicy);







  policy.command("list [share]").usage("[options] [share]").description($("List stored access policies on the share")).option("--share <share>", $("the storage share name")).addStorageAccountOption().execute(listSharePolicy);






  policy.command("set [share] [name]").usage("[options] [share] [name]").description($("Set a stored access policy on the share")).option("--share <share>", $("the storage share name")).option("--name <name>", $("the policy name")).option("--start <start>", $("the UTC time at which the policy becomes valid and passing two spaces means to remove the existing setting")).option("--expiry <expiry>", $("the UTC time at which the policy expires and passing two spaces means to remove the existing setting")).option("--permissions <permissions>", $("the operation permissions combining symbols of r(Read)/w(Write)/d(Delete)/l(List) and passing two spaces means to remove the existing setting")).addStorageAccountOption().execute(setSharePolicy);










  policy.command("delete [share] [name]").usage("[options] [share] [name]").description($("Delete a stored access policy on the share")).option("--share <share>", $("the storage share name")).option("--name <name>", $("the policy name")).addStorageAccountOption().execute(deleteSharePolicy);







  var file = storage.category("file").description($("Commands to manage your Storage files"));


  file.command("list [share] [path]").usage("[options] [share] [path]").description($("List storage files in the specified share under specific path")).option("--share <share>", $("the storage share name")).option("-p, --path <path>", $("the path to be listed")).option("--sas <sas>", $("the shared access signature of the storage file share")).addStorageAccountOption().execute(listFiles);








  file.command("delete [share] [path]").usage("[options] [share] [path]").description($("Delete the specified storage file")).option("--share <share>", $("the storage share name")).option("-p, --path <path>", $("the path to the storage file")).option("-q, --quiet", $("remove the specified storage file without confirmation")).option("--sas <sas>", $("the shared access signature of the storage file share")).addStorageAccountOption().execute(deleteFile);









  file.command("upload [source] [share] [path]").usage("[options] [source] [share] [path]").description($("Upload the specified local file to storage")).option("-s, --source <source>", $("the local file path")).option("--share <share>", $("the storage share name")).option("-p, --path <path>", $("the path to the storage file")).option("--concurrenttaskcount <concurrenttaskcount>", $("the maximum number of concurrent upload requests")).option("-q, --quiet", $("overwrite the specified storage file without confirmation")).option("--sas <sas>", $("the shared access signature of the storage file share")).addStorageAccountOption().execute(uploadFile);











  file.command("download [share] [path] [destination]").usage("[options] [share] [path] [destination]").description($("Download the specified storage file")).option("--share <share>", $("the storage share name")).option("-p, --path <path>", $("the path to the storage file")).option("-d, --destination <destination>", $("path to the destination file or directory")).option("-m, --checkmd5", $("check md5sum for the downloaded file")).option("--concurrenttaskcount <concurrenttaskcount>", $("the maximum number of concurrent download requests")).option("-q, --quiet", $("overwrite the destination file without confirmation")).option("--sas <sas>", $("the shared access signature of the storage file share")).addStorageAccountOption().execute(downloadFile);












  var copy = file.category("copy").description($("Commands to manage your file copy operations"));


  copy.command("start [sourceUri] [destShare]").usage("[options] [sourceUri] [destShare]").description($("Start to copy the resource to the specified storage file which completes asynchronously")).option("--source-sas <sourceSas>", $("the shared access signature of the source storage")).option("--source-uri <sourceUri>", $("the source storage blob or file absolute uri")).option("--source-share <sourceShare>", $("the source storage share name when copies a file to a blob")).option("--source-path <sourcePath>", $("the source storage file path when copies a file to a blob")).option("--source-container <sourceContainer>", $("the source storage container name when copies a blob to a blob")).option("--source-blob <sourceBlob>", $("the source storage blob name when copies a blob to a blob")).option("--dest-account-name <destAccountName>", $("the destination storage account name")).option("--dest-account-key <destAccountKey>", $("the destination storage account key")).option("--dest-connection-string <destConnectionString>", $("the destination storage connection string")).option("--dest-sas <destSas>", $("the shared access signature of the destination storage share or file")).option("--dest-share <destShare>", $("the destination storage share name")).option("--dest-path <destPath>", $("the destination storage file path")).option("-q, --quiet", $("overwrite the destination file without confirmation")).addStorageAccountOption().execute(startFileCopy);


















  copy.command("show [share] [path]").usage("[options] [share] [path]").description($("Show the copy status")).option("--share <share>", $("the destination share in the file copy start operation")).option("--path <path>", $("the destination file path in the file copy start operation")).option("--sas <sas>", $("the shared access signature of the destination storage share or file")).addStorageAccountOption().execute(showFileCopy);








  copy.command("stop [share] [path] [copyid]").usage("[options] [share] [path] [copyid]").description($("Stop the copy operation")).option("--share <share>", $("the destination share in the file copy start operation")).option("--path <path>", $("the destination file path in the file copy start operation")).option("--copyid <copyid>", $("the copy ID which is returned from file copy start operation")).addStorageAccountOption().execute(stopFileCopy);








  var fileSas = file.category("sas").description($("Commands to manage shared access signatures of your Storage file"));


  fileSas.command("create [share] [path] [permissions] [expiry]").description($("Generate shared access signature of storage file")).option("--share <share>", $("the storage share name")).option("-p, --path <path>", $("the path to the storage file")).option("--permissions <permissions>", $("the operation permissions combining symbols of r(Read)/w(Write)/d(Delete)")).option("--protocol <protocol>", $("the protocol permitted for a request made with the SAS. Possible values are HttpsOnly and HttpsOrHttp")).option("--ip-range <ipRange>", $("an IP address or a range of IP addresses from which to accept requests. When specifying a range of IP addresses, note that the range is inclusive. For example, specifying 168.1.5.65 or 168.1.5.60-168.1.5.70 on the SAS restricts the request to those IP addresses.")).option("--start <start>", $("the UTC time at which the SAS becomes valid")).option("--expiry <expiry>", $("the UTC time at which the SAS expires")).option("--policy <policy>", $("the stored access policy identifier")).addStorageAccountOption().execute(createFileSas);












  var directory = storage.category("directory").description($("Commands to manage your Storage file directory"));


  directory.command("create [share] [path]").description($("Create a storage file directory")).option("--share <share>", $("the storage file share name")).option("-p, --path <path>", $("the path to the storage file directory to be created")).option("--sas <sas>", $("the shared access signature of the storage file share")).addStorageAccountOption().execute(createDirectory);







  directory.command("delete [share] [path]").description($("Delete the specified storage file directory")).option("--share <share>", $("the storage share name")).option("-p, --path <path>", $("the path to the storage file directory to be deleted")).option("-q, --quiet", $("remove the specified storage file directory without confirmation")).option("--sas <sas>", $("the shared access signature of the storage file share")).addStorageAccountOption().execute(deleteDirectory);















  function getFileServiceClient(options) {
    var serviceClient = StorageUtil.getServiceClient(StorageUtil.getFileService, options);
    applyFileServicePatch(serviceClient);
    return serviceClient; };







  function getStorageFileOperation(serviceClient, operationName) {
    return StorageUtil.getStorageOperation(serviceClient, StorageUtil.OperationType.File, operationName); };





  function getStorageFileOperationDefaultOption() {
    var option = StorageUtil.getStorageOperationDefaultOption();


    option.parallelOperationThreadCount = StorageUtil.threadsInOperation;

    return option; };





  function createSharePolicySetting(options) {
    var policySettings = { };
    policySettings.accessType = StorageUtil.AccessType.Share;
    policySettings.serviceClient = getFileServiceClient(options);
    policySettings.getAclOperation = getStorageFileOperation(policySettings.serviceClient, "getShareAcl");
    policySettings.setAclOperation = getStorageFileOperation(policySettings.serviceClient, "setShareAcl");
    policySettings.storageOptions = getStorageFileOperationDefaultOption();
    policySettings.policyOptions = options;
    return policySettings; };





  function createShare(share, options, _) { var fileService, operation, tips, storageOptions, created; var __frame = { name: "createShare", line: 335 }; return __func(_, this, arguments, createShare, 2, __frame, function __$createShare() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        operation = getStorageFileOperation(fileService, "createShare");
        tips = util.format($("Creating storage file share %s"), share);
        storageOptions = getStorageFileOperationDefaultOption();
        if (options.quota) {
          storageOptions.quota = options.quota; } ;


        startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$createShare() {

              return performStorageOperation(operation, __cb(_, __frame, 12, 20, function ___(__0, __2) { created = __2;
                if ((created === false)) {
                  return _(new Error(util.format($("Share '%s' already exists"), share))); } ; _(null, null, true); }, true), share, storageOptions); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$createShare() {


                endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$createShare() {


            logger.verbose(util.format($("Share %s has been created successfully"), share));
            return showShare(share, StorageUtil.getStorageAccountOptions(options), __cb(_, __frame, 21, 4, function __$createShare() { _(); }, true)); }); }); }, true)); }); };





  function deleteShare(share, options, _) { var fileService, operation, tips, storageOptions, force; var __frame = { name: "deleteShare", line: 362 }; return __func(_, this, arguments, deleteShare, 2, __frame, function __$deleteShare() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        operation = getStorageFileOperation(fileService, "deleteShare");
        tips = util.format($("Deleting storage file share %s"), share);
        storageOptions = getStorageFileOperationDefaultOption();
        force = !!options.quiet; return (function __$deleteShare(__then) {

          if ((force !== true)) {
            return interaction.confirm(util.format($("Do you want to delete share %s? "), share), __cb(_, __frame, 9, 26, function ___(__0, __2) { force = __2;
              if ((force !== true)) { return _(null); } ; __then(); }, true)); } else { __then(); } ; })(function __$deleteShare() {




          startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$deleteShare() { return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$deleteShare() {


                      return performStorageOperation(operation, __cb(_, __frame, 18, 6, __then, true), share, storageOptions); }); })(function ___(e, __result) { __catch(function __$deleteShare() { if (e) {

                        if (StorageUtil.isNotFoundException(e)) {
                          return _(new Error(util.format($("Can not find share '%s'"), share))); }
                         else {
                          return _(e); } ; __then(); } else { _(null, __result); } ; }, _); }); })(function ___() { __tryCatch(_, function __$deleteShare() { _(null, null, true); }); }); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$deleteShare() {


                  endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$deleteShare() {


              logger.info(util.format($("Share %s has been deleted successfully"), share)); _(); }); }); }); }, true)); }); };





  function showShare(share, options, _) { var fileService, operation, tips, storageOptions, properties, getStatsOperation, stats; var __frame = { name: "showShare", line: 397 }; return __func(_, this, arguments, showShare, 2, __frame, function __$showShare() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        operation = getStorageFileOperation(fileService, "getShareProperties");
        tips = $("Getting Storage share information");
        storageOptions = getStorageFileOperationDefaultOption();
        properties = [];

        startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$showShare() { return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$showShare() {

                    return performStorageOperation(operation, __cb(_, __frame, 10, 19, function ___(__0, __2) { properties = __2;

                      getStatsOperation = getStorageFileOperation(fileService, "getShareStats");
                      return performStorageOperation(getStatsOperation, __cb(_, __frame, 13, 18, function ___(__0, __3) { stats = __3;
                        properties.shareUsage = stats.shareStats.shareUsage; __then(); }, true), share, storageOptions); }, true), share, storageOptions); }); })(function ___(e, __result) { __catch(function __$showShare() { if (e) {

                      if (StorageUtil.isNotFoundException(e)) {
                        return _(new Error(util.format($("Share %s doesn't exist"), share))); }
                       else {
                        return _(e); } ; __then(); } else { _(null, __result); } ; }, _); }); })(function ___() { __tryCatch(_, function __$showShare() { _(null, null, true); }); }); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$showShare() {


                endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$showShare() {


            logger.json(properties); _(); }); }); }, true)); }); };





  function setShare(share, options, _) { var fileService, tips, properties, getPropertiesOperation, storageOptions, setPropertiesOperation; var __frame = { name: "setShare", line: 428 }; return __func(_, this, arguments, setShare, 2, __frame, function __$setShare() {
      fileService = getFileServiceClient(options);

      if ((options.quota && !validation.isInt(options.quota))) {
        return _(new Error(util.format($("The share quota must be an integer in GB")))); } ;


      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 7, 24, function ___(__0, __1) { share = __1;
        tips = $("Setting share");


        startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$setShare() {

              getPropertiesOperation = getStorageFileOperation(fileService, "getShareProperties");
              storageOptions = getStorageFileOperationDefaultOption();
              return performStorageOperation(getPropertiesOperation, __cb(_, __frame, 15, 19, function ___(__0, __2) { properties = __2;

                setPropertiesOperation = getStorageFileOperation(fileService, "setShareProperties");
                if (options.quota) {
                  properties.quota = options.quota; } ;

                return performStorageOperation(setPropertiesOperation, __cb(_, __frame, 21, 6, function __$setShare() { _(null, null, true); }, true), share, properties, storageOptions); }, true), share, storageOptions); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$setShare() {

                endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$setShare() {


            return showShare(share, StorageUtil.getStorageAccountOptions(options), __cb(_, __frame, 26, 4, function __$setShare() { _(); }, true)); }); }); }, true)); }); };








  function listShares(prefix, options, _) { var fileService, listOperation, tips, storageOptions, shares; var __frame = { name: "listShares", line: 463 }; return __func(_, this, arguments, listShares, 2, __frame, function __$listShares() {
      fileService = getFileServiceClient(options);
      listOperation = getStorageFileOperation(fileService, "listAllShares");
      tips = $("Getting storage shares");
      storageOptions = getStorageFileOperationDefaultOption();

      validateSharePrefix(prefix);

      storageOptions.prefix = prefix;
      startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$listShares() {


            return performStorageOperation(listOperation, __cb(_, __frame, 12, 15, function ___(__0, __1) { shares = __1; _(null, null, true); }, true), storageOptions); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$listShares() {

              endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$listShares() {


          cli.interaction.formatOutput(shares, function(outputData) {
            if ((outputData.length === 0)) {
              logger.info($("No share found")); }
             else {
              logger.table(outputData, function(row, item) {
                row.cell($("Name"), item.name);
                row.cell($("Last Modified"), item.lastModified); }); } ; }); _(); }); }); }); };








  function createShareSas(share, permissions, expiry, options, _) { var __frame = { name: "createShareSas", line: 495 }; return __func(_, this, arguments, createShareSas, 4, __frame, function __$createShareSas() {
      return createSas(share, null, permissions, options.protocol, options.ipRange, expiry, options, true, __cb(_, __frame, 1, 4, function __$createShareSas() { _(); }, true)); }); };





  function createFileSas(share, path, permissions, expiry, options, _) { var __frame = { name: "createFileSas", line: 502 }; return __func(_, this, arguments, createFileSas, 5, __frame, function __$createFileSas() {
      return createSas(share, path, permissions, options.protocol, options.ipRange, expiry, options, false, __cb(_, __frame, 1, 4, function __$createFileSas() { _(); }, true)); }); };





  function createSas(share, path, permissions, protocol, ipRange, expiry, options, isShare, _) { var fileService, accessType, start, output, sharedAccessPolicy, tips, result, directory, file; var __frame = { name: "createSas", line: 509 }; return __func(_, this, arguments, createSas, 8, __frame, function __$createSas() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1; return (function __$createSas(__then) {


          if (!isShare) {
            return interaction.promptIfNotGiven($("File path: "), path, __cb(_, __frame, 6, 25, function ___(__0, __2) { path = __2;
              accessType = StorageUtil.AccessType.File; __then(); }, true)); } else {

            accessType = StorageUtil.AccessType.Share; __then(); } ; })(function __$createSas() { return (function __$createSas(__then) {


            if (!options.policy) {
              return interaction.promptIfNotGiven($("Permissions: "), permissions, __cb(_, __frame, 13, 32, function ___(__0, __3) { permissions = __3;
                StorageUtil.validatePermissions(accessType, permissions);

                return interaction.promptIfNotGiven($("Expiry: "), expiry, __cb(_, __frame, 16, 27, function ___(__0, __4) { expiry = __4;
                  expiry = utils.parseDateTime(expiry); __then(); }, true)); }, true)); } else { __then(); } ; })(function __$createSas() {



            if (options.start) {
              start = utils.parseDateTime(options.start); } ;


            output = { sas: "" };
            sharedAccessPolicy = StorageUtil.getSharedAccessPolicy(accessType, permissions, protocol, ipRange, start, expiry, null, options.policy);

            if (isShare) {
              tips = util.format($("Creating shared access signature for share %s"), share); }
             else {
              tips = util.format($("Creating shared access signature for file %s"), ((share + "/") + path)); } ;

            startProgress(tips);

            result = { dirname: null, basename: null };
            if (!isShare) {
              path = StorageUtil.normalizePath(path);
              result = StorageUtil.fetchBasenameAndDirname(path); } ;


            directory = (result.dirname ? result.dirname : "");
            file = result.basename; return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$createSas() {


                  output.sas = fileService.generateSharedAccessSignature(share, directory, file, sharedAccessPolicy);
                  output.url = fileService.getUrl(share, directory, file, output.sas); _(null, null, true); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$createSas() {

                    endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$createSas() {


                cli.interaction.formatOutput(output, function(outputData) {
                  logger.data($("Shared Access Signature"), outputData.sas);
                  logger.data($("Shared Access URL"), outputData.url); }); _(); }); }); }); }); }, true)); }); };






  function createSharePolicy(share, name, options, _) { var createPolicySettings, policies; var __frame = { name: "createSharePolicy", line: 569 }; return __func(_, this, arguments, createSharePolicy, 3, __frame, function __$createSharePolicy() {
      createPolicySettings = createSharePolicySetting(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 52, function ___(__0, __1) { createPolicySettings.resourceName = __1;
        return interaction.promptIfNotGiven($("Policy name: "), name, __cb(_, __frame, 3, 50, function ___(__0, __2) { createPolicySettings.policyName = __2;
          createPolicySettings.tips = util.format($("Creating the stored access policy %s on the share %s"), createPolicySettings.policyName, createPolicySettings.resourceName);

          if (options.permissions) {
            StorageUtil.validatePermissions(StorageUtil.AccessType.Share, options.permissions); } ;


          return StorageUtil.createPolicy(createPolicySettings, __cb(_, __frame, 10, 31, function ___(__0, __3) { policies = __3;
            cli.interaction.formatOutput(policies, function(outputData) {
              logger.info(util.format($("The stored access policies on share %s are: "), createPolicySettings.resourceName));
              StorageUtil.showPolicyResults(outputData); }); _(); }, true)); }, true)); }, true)); }); };






  function listSharePolicy(share, options, _) { var listPolicySettings, policies; var __frame = { name: "listSharePolicy", line: 589 }; return __func(_, this, arguments, listSharePolicy, 2, __frame, function __$listSharePolicy() {
      listPolicySettings = createSharePolicySetting(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 50, function ___(__0, __1) { listPolicySettings.resourceName = __1;
        listPolicySettings.tips = util.format($("Listing the stored access policies on the share %s"), listPolicySettings.resourceName);

        return StorageUtil.selectPolicy(listPolicySettings, __cb(_, __frame, 5, 31, function ___(__0, __2) { policies = __2;
          cli.interaction.formatOutput(policies, function(outputData) {
            if (outputData) {
              StorageUtil.showPolicyResults(outputData); }
             else {
              logger.info(util.format($("There is no stored access policy on the share %s."), listPolicySettings.resourceName)); } ; }); _(); }, true)); }, true)); }); };







  function showSharePolicy(share, name, options, _) { var showPolicySettings, policy; var __frame = { name: "showSharePolicy", line: 607 }; return __func(_, this, arguments, showSharePolicy, 3, __frame, function __$showSharePolicy() {
      showPolicySettings = createSharePolicySetting(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 50, function ___(__0, __1) { showPolicySettings.resourceName = __1;
        return interaction.promptIfNotGiven($("Policy name: "), name, __cb(_, __frame, 3, 48, function ___(__0, __2) { showPolicySettings.policyName = __2;
          showPolicySettings.tips = util.format($("Showing the stored access policy %s on the share %s"), showPolicySettings.policyName, showPolicySettings.resourceName);

          return StorageUtil.selectPolicy(showPolicySettings, __cb(_, __frame, 6, 29, function ___(__0, __3) { policy = __3;
            cli.interaction.formatOutput(policy, function(outputData) {
              StorageUtil.showPolicyResults(outputData); }); _(); }, true)); }, true)); }, true)); }); };






  function setSharePolicy(share, name, options, _) { var setPolicySettings, policies; var __frame = { name: "setSharePolicy", line: 622 }; return __func(_, this, arguments, setSharePolicy, 3, __frame, function __$setSharePolicy() {
      setPolicySettings = createSharePolicySetting(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 49, function ___(__0, __1) { setPolicySettings.resourceName = __1;
        return interaction.promptIfNotGiven($("Policy name: "), name, __cb(_, __frame, 3, 47, function ___(__0, __2) { setPolicySettings.policyName = __2;
          setPolicySettings.tips = util.format($("Setting the stored access policy %s on the share %s"), setPolicySettings.policyName, setPolicySettings.resourceName);

          if (options.permissions) {
            StorageUtil.validatePermissions(StorageUtil.AccessType.Share, options.permissions); } ;


          return StorageUtil.setPolicy(setPolicySettings, __cb(_, __frame, 10, 31, function ___(__0, __3) { policies = __3;
            cli.interaction.formatOutput(policies, function(outputData) {
              logger.info(util.format($("The stored access policies on share %s are: "), setPolicySettings.resourceName));
              StorageUtil.showPolicyResults(outputData); }); _(); }, true)); }, true)); }, true)); }); };






  function deleteSharePolicy(share, name, options, _) { var deletePolicySettings, policies; var __frame = { name: "deleteSharePolicy", line: 642 }; return __func(_, this, arguments, deleteSharePolicy, 3, __frame, function __$deleteSharePolicy() {
      deletePolicySettings = createSharePolicySetting(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 52, function ___(__0, __1) { deletePolicySettings.resourceName = __1;
        return interaction.promptIfNotGiven($("Policy name: "), name, __cb(_, __frame, 3, 50, function ___(__0, __2) { deletePolicySettings.policyName = __2;
          deletePolicySettings.tips = util.format($("Deleting the stored access policy %s on the share %s"), deletePolicySettings.policyName, deletePolicySettings.resourceName);

          return StorageUtil.deletePolicy(deletePolicySettings, __cb(_, __frame, 6, 31, function ___(__0, __3) { policies = __3;
            cli.interaction.formatOutput(policies, function(outputData) {
              if (outputData) {
                logger.info(util.format($("The stored access policies on share %s are: "), deletePolicySettings.resourceName));
                StorageUtil.showPolicyResults(outputData); }
               else {
                logger.info(util.format($("There is no stored access policy on the share %s."), deletePolicySettings.resourceName)); } ; }); _(); }, true)); }, true)); }, true)); }); };











  function listFiles(share, path, options, _) { var fileService, listOperation, tips, storageOptions, listResults, setUriFunc; var __frame = { name: "listFiles", line: 666 }; return __func(_, this, arguments, listFiles, 3, __frame, function __$listFiles() {
      fileService = getFileServiceClient(options);
      listOperation = getStorageFileOperation(fileService, "listFilesAndDirectories");
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 3, 24, function ___(__0, __1) { share = __1;
        if (__.isUndefined(path)) {
          path = ""; } ;


        path = StorageUtil.normalizePath(path);
        tips = util.format($("Getting storage files under '%s' of share %s"), path, share);
        storageOptions = getStorageFileOperationDefaultOption();


        startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$listFiles() {


              return performStorageOperation(listOperation, __cb(_, __frame, 16, 20, function ___(__0, __2) { listResults = __2; _(null, null, true); }, true), share, path, storageOptions); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$listFiles() {

                endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$listFiles() {


            if (cli.output.format().json) {
              setUriFunc = function(item) {
                item.uri = fileService.getUrl(share, path, item.name); };


              listResults.directories.forEach(setUriFunc);
              listResults.files.forEach(setUriFunc); } ;


            cli.interaction.formatOutput(listResults, function(outputData) {
              if (((outputData.directories.length + outputData.files.length) > 0)) {
                logger.table(outputData.directories.concat(outputData.files), function(row, item) {
                  row.cell($("Name"), item.name);
                  if (item.contentLength) {
                    row.cell($("Length"), item.contentLength);
                    row.cell($("Type"), ""); }
                   else {
                    row.cell($("Length"), "");
                    row.cell($("Type"), "<DIR>"); } ; }); } ; }); _(); }); }); }, true)); }); };









  function deleteFile(share, path, options, _) { var fileService, operation, tips, storageOptions, force, result, directory, file; var __frame = { name: "deleteFile", line: 715 }; return __func(_, this, arguments, deleteFile, 3, __frame, function __$deleteFile() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        return interaction.promptIfNotGiven($("Path to the file: "), path, __cb(_, __frame, 3, 23, function ___(__0, __2) { path = __2;
          operation = getStorageFileOperation(fileService, "deleteFile");
          tips = util.format($("Deleting storage file '%s' in share %s"), path, share);
          storageOptions = getStorageFileOperationDefaultOption();
          force = !!options.quiet; return (function __$deleteFile(__then) {

            if ((force !== true)) {
              return interaction.confirm(util.format($("Do you want to delete file %s? "), path), __cb(_, __frame, 10, 26, function ___(__0, __3) { force = __3;
                if ((force !== true)) { return _(null); } ; __then(); }, true)); } else { __then(); } ; })(function __$deleteFile() {




            startProgress(tips);

            path = StorageUtil.normalizePath(path);
            result = StorageUtil.fetchBasenameAndDirname(path);
            directory = result.dirname;
            file = result.basename; return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$deleteFile() { return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$deleteFile() {


                        return performStorageOperation(operation, __cb(_, __frame, 24, 6, __then, true), share, directory, file, storageOptions); }); })(function ___(e, __result) { __catch(function __$deleteFile() { if (e) {

                          if (StorageUtil.isNotFoundException(e)) {
                            return _(new Error(util.format($("Can not find file '%s' in share %s"), path, share))); }
                           else {
                            return _(e); } ; __then(); } else { _(null, __result); } ; }, _); }); })(function ___() { __tryCatch(_, function __$deleteFile() { _(null, null, true); }); }); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$deleteFile() {


                    endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$deleteFile() {


                logger.info(util.format($("File '%s' in share %s has been deleted successfully"), path, share)); _(); }); }); }); }, true)); }, true)); }); };





  function uploadFile(source, share, path, options, _) { var fileService, storageOptions, force, fsStatus, pathIsDirectory, remoteFileExists, directory, file, result, summary, printer, intervalId, succeeded, uploadFileResult; var __frame = { name: "uploadFile", line: 756 }; return __func(_, this, arguments, uploadFile, 4, __frame, function __$uploadFile() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("File to be uploaded: "), source, __cb(_, __frame, 2, 25, function ___(__0, __4) { source = __4;
        return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 3, 24, function ___(__0, __5) { share = __5;
          storageOptions = getStorageFileOperationDefaultOption();
          storageOptions.storeFileContentMD5 = true;
          force = !!options.quiet;

          return utils.fileExists(source, __cb(_, __frame, 8, 15, function ___(__0, __7) { var __6 = !__7; return (function __$uploadFile(__then) { if (__6) {
                return _(new Error(util.format($("Local file %s doesn't exist"), source))); } else { __then(); } ; })(function __$uploadFile() {


              return fs.stat(source, __cb(_, __frame, 12, 22, function ___(__0, __8) { fsStatus = __8;
                if (!fsStatus.isFile()) {
                  return _(new Error(util.format($("%s is not a file"), source))); } ;

                if ((fsStatus.size > StorageUtil.MaxFileSize)) {
                  return _(new Error(util.format($("The local file size %d exceeds the Azure file size limit %d"), fsStatus.size, StorageUtil.MaxFileSize))); } ;


                pathIsDirectory = ((path && (path.length > 0)) && (((path[(path.length - 1)] === "/") || (path[(path.length - 1)] === "\\"))));

                remoteFileExists = false;


                startProgress(util.format($("Checking file or directory '%s' in share %s"), (path ? path : ""), share)); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$uploadFile() { return (function __$uploadFile(__then) {

                        if (path) {

                          path = StorageUtil.normalizePath(path);
                          result = StorageUtil.fetchBasenameAndDirname(path);
                          directory = result.dirname;
                          file = result.basename; return (function __$uploadFile(_) {








                            var __1 = (!utils.stringIsNullOrEmpty(file) && !pathIsDirectory); if (!__1) { return _(null, __1); } ;
                            return performStorageOperation(getStorageFileOperation(fileService, "doesFileExist"), __cb(_, __frame, 42, 10, function ___(__0, __3) {





                              var __2 = __3.exists; return _(null, __2); }, true), share, directory, file, storageOptions); })(__cb(_, __frame, -755, 18, function ___(__0, __9) { return (function __$uploadFile(__then) { if (__9) {

                                remoteFileExists = true; __then(); } else { return (function __$uploadFile(_) {



                                  var __2 = pathIsDirectory; if (__2) { return _(null, __2); } ; return performStorageOperation(getStorageFileOperation(fileService, "doesDirectoryExist"), __cb(_, __frame, 54, 36, function ___(__0, __4) {



                                    var __3 = __4.exists; return _(null, __3); }, true), share, path); })(__cb(_, __frame, -755, 18, function ___(__0, __10) { return (function __$uploadFile(__then) { if (__10) {

                                      directory = path;
                                      file = pathUtil.basename(source); __then(); } else {



                                      return performStorageOperation(getStorageFileOperation(fileService, "doesDirectoryExist"), __cb(_, __frame, 65, 17, function ___(__0, __12) {



                                        var __11 = __12.exists; return (function __$uploadFile(__then) { if (__11) { __then(); } else {




                                            return _(new Error(util.format($("Path '%s' is neither an existing file nor under an existing directory"), path))); } ; })(__then); }, true), share, directory); } ; })(__then); }, true)); } ; })(__then); }, true)); } else {






                          directory = "";
                          file = pathUtil.basename(source); __then(); } ; })(function __$uploadFile() { return (function __$uploadFile(_) {




                          var __3 = remoteFileExists; if (__3) { return _(null, __3); } ; return performStorageOperation(getStorageFileOperation(fileService, "doesFileExist"), __cb(_, __frame, 87, 30, function ___(__0, __5) {





                            var __4 = __5.exists; return _(null, __4); }, true), share, directory, file, storageOptions); })(__cb(_, __frame, -755, 18, function ___(__0, __13) { return (function __$uploadFile(__then) { if (__13) {
                              remoteFileExists = true; __then(); } else { __then(); } ; })(function __$uploadFile() { _(null, null, true); }); }, true)); }); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$uploadFile() {


                        endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$uploadFile() { return (function __$uploadFile(__then) {


                      if ((remoteFileExists === true)) { return (function __$uploadFile(__then) {
                          if ((force !== true)) {
                            return interaction.confirm(util.format($("Do you want to overwrite remote file %s? "), pathUtil.join(directory, file)), __cb(_, __frame, 102, 28, function ___(__0, __14) { force = __14;
                              if ((force !== true)) { return _(null); } ; __then(); }, true)); } else { __then(); } ; })(__then); } else { __then(); } ; })(function __$uploadFile() {





                      startProgress(util.format($("Uploading file '%s' to '%s' under share %s"), source, directory, share));
                      endProgress();

                      summary = new SpeedSummary(file);
                      storageOptions.speedSummary = summary;
                      storageOptions.parallelOperationThreadCount = (options.concurrenttaskcount || storageOptions.parallelOperationThreadCount);
                      printer = StorageUtil.getSpeedPrinter(summary);
                      intervalId = -1;
                      if (!logger.format().json) {
                        intervalId = setInterval(printer, 1000); } ;


                      succeeded = false; return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$uploadFile() {


                            return performStorageOperation(getStorageFileOperation(fileService, "createFileFromLocalFile"), __cb(_, __frame, 124, 25, function ___(__0, __15) { uploadFileResult = __15;








                              succeeded = true; _(null, null, true); }, true), share, directory, file, source, storageOptions); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$uploadFile() {

                              printer(true);
                              clearInterval(intervalId); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$uploadFile() {


                          if ((succeeded === true)) {
                            uploadFileResult = StorageUtil.embedTransferSummary(uploadFileResult, summary);
                            cli.interaction.formatOutput(uploadFileResult, function() {
                              logger.info(util.format($("Successfully uploaded file '%s' to share %s"), source, share)); }); } ; _(); }); }); }); }); }); }, true)); }); }, true)); }, true)); }, true)); }); };




  function downloadFile(share, path, destination, options, _) { var fileService, storageOptions, force, result, directory, file, stat, operation, summary, printer, intervalId, downloadedFile; var __frame = { name: "downloadFile", line: 903 }; return __func(_, this, arguments, downloadFile, 4, __frame, function __$downloadFile() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        return interaction.promptIfNotGiven($("Path of the file to be downloaded: "), path, __cb(_, __frame, 3, 23, function ___(__0, __2) { path = __2;
          storageOptions = getStorageFileOperationDefaultOption();
          force = !!options.quiet;

          path = StorageUtil.normalizePath(path);
          result = StorageUtil.fetchBasenameAndDirname(path);
          directory = result.dirname;
          file = result.basename;
          logger.verbose(directory);
          logger.verbose(file); return (function __$downloadFile(__then) {

            if (destination) { return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$downloadFile() {


                    return fs.stat(destination, __cb(_, __frame, 17, 18, function ___(__0, __3) { stat = __3;
                      if (stat.isDirectory()) {



                        destination = pathUtil.join(destination, file); } ; __then(); }, true)); }); })(function ___(err, __result) { __catch(function __$downloadFile() { if (err) {


                      if (!StorageUtil.isFileNotFoundException(err)) {
                        return _(err); } ; __then(); } else { _(null, __result); } ; }, _); }); })(function ___() { __tryCatch(_, __then); }); } else {



              destination = pathUtil.join(".", file); __then(); } ; })(function __$downloadFile() {





            return utils.fileExists(destination, __cb(_, __frame, 36, 14, function ___(__0, __4) { return (function __$downloadFile(__then) { if (__4) { return (function __$downloadFile(__then) {
                    if ((force !== true)) {
                      return interaction.confirm(util.format($("Do you want to overwrite file %s? "), destination), __cb(_, __frame, 38, 28, function ___(__0, __5) { force = __5;
                        if ((force !== true)) { return _(null); } ; __then(); }, true)); } else { __then(); } ; })(__then); } else { __then(); } ; })(function __$downloadFile() {





                operation = getStorageFileOperation(fileService, "getFileToLocalFile");
                summary = new SpeedSummary(file);
                storageOptions.speedSummary = summary;
                storageOptions.disableContentMD5Validation = !options.checkmd5;
                storageOptions.parallelOperationThreadCount = (options.concurrenttaskcount || storageOptions.parallelOperationThreadCount);

                startProgress(util.format($("Download remote file '%s' from share %s to local path '%s'"), path, share, destination));
                endProgress();

                printer = StorageUtil.getSpeedPrinter(summary);
                intervalId = -1;
                if (!logger.format().json) {
                  intervalId = setInterval(printer, 1000); } ; return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$downloadFile() { return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$downloadFile() {




                            return performStorageOperation(operation, __cb(_, __frame, 62, 23, function ___(__0, __6) { downloadedFile = __6; __then(); }, true), share, directory, file, destination, storageOptions); }); })(function ___(e, __result) { __catch(function __$downloadFile() { if (e) {

                              if (StorageUtil.isNotFoundException(e)) {
                                return _(new Error(util.format($("File '%s' in share %s does not exist"), path, share))); }
                               else {
                                return _(e); } ; __then(); } else { _(null, __result); } ; }, _); }); })(function ___() { __tryCatch(_, function __$downloadFile() { _(null, null, true); }); }); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$downloadFile() {


                        printer(true);
                        clearInterval(printer); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$downloadFile() {


                    downloadedFile = StorageUtil.embedTransferSummary(downloadedFile, summary);
                    cli.interaction.formatOutput(downloadedFile, function() {
                      logger.info(util.format($("File saved as %s"), destination)); }); _(); }); }); }); }, true)); }); }, true)); }, true)); }); };






  function getStorageFileProperties(share, path, options, _) { var fileService, storageOptions, file, result, propertiesOperation, tips; var __frame = { name: "getStorageFileProperties", line: 986 }; return __func(_, this, arguments, getStorageFileProperties, 3, __frame, function __$getStorageFileProperties() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        return interaction.promptIfNotGiven($("File path: "), path, __cb(_, __frame, 3, 23, function ___(__0, __2) { path = __2;
          storageOptions = getStorageFileOperationDefaultOption();
          file = { };
          path = StorageUtil.normalizePath(path);
          result = StorageUtil.fetchBasenameAndDirname(path);
          propertiesOperation = getStorageFileOperation(fileService, "getFileProperties");
          tips = $("Getting Storage file information");

          startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$getStorageFileProperties() { return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$getStorageFileProperties() {


                      return performStorageOperation(propertiesOperation, __cb(_, __frame, 14, 13, function ___(__0, __3) { file = __3; __then(); }, true), share, result.dirname, result.basename, storageOptions); }); })(function ___(e, __result) { __catch(function __$getStorageFileProperties() { if (e) {

                        if (StorageUtil.isNotFoundException(e)) {
                          return _(new Error(util.format($("File %s in share %s doesn't exist"), path, share))); }
                         else {
                          return _(e); } ; __then(); } else { _(null, __result); } ; }, _); }); })(function ___() { __tryCatch(_, function __$getStorageFileProperties() { _(null, null, true); }); }); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$getStorageFileProperties() {


                  endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$getStorageFileProperties() {

              return _(null, file); }); }); }, true)); }, true)); }); };


  function doesStorageFileExist(share, path, options, _) { var fileService, storageOptions, propertiesOperation, result; var __frame = { name: "doesStorageFileExist", line: 1013 }; return __func(_, this, arguments, doesStorageFileExist, 3, __frame, function __$doesStorageFileExist() {
      fileService = getFileServiceClient(options);
      storageOptions = getStorageFileOperationDefaultOption();
      propertiesOperation = getStorageFileOperation(fileService, "doesFileExist");

      path = StorageUtil.normalizePath(path);
      result = StorageUtil.fetchBasenameAndDirname(path);

      return performStorageOperation(propertiesOperation, __cb(_, __frame, 8, 11, function ___(__0, __2) { var __1 = __2.exists; return _(null, __1); }, true), share, result.dirname, result.basename, storageOptions); }); };


  function createDirectory(share, path, options, _) { var fileService, operation, tips, storageOptions, directoryResult; var __frame = { name: "createDirectory", line: 1024 }; return __func(_, this, arguments, createDirectory, 3, __frame, function __$createDirectory() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        return interaction.promptIfNotGiven($("Path to the directory to be created: "), path, __cb(_, __frame, 3, 23, function ___(__0, __2) { path = __2;
          path = StorageUtil.normalizePath(path);

          operation = getStorageFileOperation(fileService, "createDirectory");
          tips = util.format($("Creating storage file directory '%s' in share %s"), path, share);
          storageOptions = getStorageFileOperationDefaultOption();
          startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$createDirectory() {



                return performStorageOperation(operation, __cb(_, __frame, 13, 24, function ___(__0, __3) { directoryResult = __3; _(null, null, true); }, true), share, path, storageOptions); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$createDirectory() {

                  endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$createDirectory() {


              logger.info(util.format($("Directory %s has been created successfully"), path));
              logger.json(directoryResult); _(); }); }); }, true)); }, true)); }); };


  function deleteDirectory(share, path, options, _) { var fileService, operation, tips, storageOptions, force; var __frame = { name: "deleteDirectory", line: 1046 }; return __func(_, this, arguments, deleteDirectory, 3, __frame, function __$deleteDirectory() {
      fileService = getFileServiceClient(options);
      return interaction.promptIfNotGiven($("Share name: "), share, __cb(_, __frame, 2, 24, function ___(__0, __1) { share = __1;
        return interaction.promptIfNotGiven($("Path to the directory to be created: "), path, __cb(_, __frame, 3, 23, function ___(__0, __2) { path = __2;
          operation = getStorageFileOperation(fileService, "deleteDirectory");
          tips = util.format($("Deleting storage file directory %s"), share);
          storageOptions = getStorageFileOperationDefaultOption();
          path = StorageUtil.normalizePath(path);
          if (utils.stringIsNullOrEmpty(path)) {
            return _(new Error($("Cannot delete root directory. A path to a subdirectory is mandatory"))); } ;


          force = !!options.quiet; return (function __$deleteDirectory(__then) {

            if ((force !== true)) {
              return interaction.confirm(util.format($("Do you want to delete directory %s in share %s? "), path, share), __cb(_, __frame, 15, 26, function ___(__0, __3) { force = __3;
                if ((force !== true)) { return _(null); } ; __then(); }, true)); } else { __then(); } ; })(function __$deleteDirectory() {




            startProgress(tips); return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$deleteDirectory() { return (function ___(__then) { (function ___(_) { __tryCatch(_, function __$deleteDirectory() {


                        return performStorageOperation(operation, __cb(_, __frame, 24, 6, __then, true), share, path, storageOptions); }); })(function ___(e, __result) { __catch(function __$deleteDirectory() { if (e) {

                          if (StorageUtil.isNotFoundException(e)) {
                            return _(new Error(util.format($("Can not find directory '%s' in share %s"), path, share))); }
                           else {
                            return _(e); } ; __then(); } else { _(null, __result); } ; }, _); }); })(function ___() { __tryCatch(_, function __$deleteDirectory() { _(null, null, true); }); }); }); })(function ___(__e, __r, __cont) { (function ___(__then) { __tryCatch(_, function __$deleteDirectory() {


                    endProgress(); __then(); }); })(function ___() { __tryCatch(_, function ___() { if (__cont) { __then(); } else { _(__e, __r); }; }); }); }); })(function ___() { __tryCatch(_, function __$deleteDirectory() {


                logger.info(util.format($("Directory %s has been deleted successfully"), path)); _(); }); }); }); }, true)); }, true)); }); };





  function startFileCopy(sourceUri, destShare, options, _) { var startCopyParams; var __frame = { name: "startFileCopy", line: 1087 }; return __func(_, this, arguments, startFileCopy, 3, __frame, function __$startFileCopy() {
      startCopyParams = StorageUtil.getStartCopyParameters(StorageUtil.CopyTypes.CopyToFile, sourceUri, options);
      startCopyParams.checkExistenceOperation = doesStorageFileExist;

      return StorageUtil.startAsyncCopy(startCopyParams, destShare, options, __cb(_, __frame, 4, 16, function __$startFileCopy() { _(); }, true)); }); };





  function showFileCopy(share, path, options, _) { var showCopyParams; var __frame = { name: "showFileCopy", line: 1097 }; return __func(_, this, arguments, showFileCopy, 3, __frame, function __$showFileCopy() {
      showCopyParams = {
        type: StorageUtil.CopyTypes.CopyToFile,
        getProperties: getStorageFileProperties };


      return StorageUtil.showAsyncCopy(showCopyParams, share, path, options, __cb(_, __frame, 6, 16, function __$showFileCopy() { _(); }, true)); }); };





  function stopFileCopy(share, path, copyid, options, _) { var getStopOperation, stopCopyParams; var __frame = { name: "stopFileCopy", line: 1109 }; return __func(_, this, arguments, stopFileCopy, 4, __frame, function __$stopFileCopy() {
      getStopOperation = function(serviceClient) {
        var operationInfo = { };
        operationInfo.operation = getStorageFileOperation(serviceClient, "abortCopyFile");
        operationInfo.options = getStorageFileOperationDefaultOption();
        return operationInfo; };


      stopCopyParams = {
        type: StorageUtil.CopyTypes.CopyToFile,
        getStopOperation: getStopOperation };


      return StorageUtil.stopAsyncCopy(stopCopyParams, share, path, copyid, options, __cb(_, __frame, 13, 16, function __$stopFileCopy() { _(); }, true)); }); };


  function validateSharePrefix(prefix) {
    if (utils.stringIsNullOrEmpty(prefix)) {
      return; } ;


    if ((!prefix.match(/^[a-z0-9][a-z0-9\-]{0,62}$/) || (prefix.indexOf("--") >= 0))) {

      throw new Error(util.format($("The given prefix '%s' is not a valid prefix of a share name"), prefix)); } ; };






  function applyFileServicePatch(fileService) {





    fileService.listAllShares = function(options, callback) {
      StorageUtil.listWithContinuation(fileService.listSharesSegmentedWithPrefix, fileService, StorageUtil.ListContinuationTokenArgIndex.Share, options.prefix, null, options, callback); };






    fileService.listFilesAndDirectories = function(share, directory, options, callback) {
      StorageUtil.listWithContinuation(fileService.listFilesAndDirectoriesSegmented, fileService, StorageUtil.ListContinuationTokenArgIndex.File, share, directory, null, options, callback); }; };};
