diff --git a/composer.json b/composer.json
index 87869e5883c9b8eac1defe34066d54af44c74f35..c3ce00ab81407ada1e385b0d27e088e956e7c4cd 100644
--- a/composer.json
+++ b/composer.json
@@ -107,7 +107,6 @@
         "drupal/google_analytics": "2.2",
         "drupal/honeypot": "^1.28",
         "drupal/image_popup": "1.1",
-        "drupal/imce": "1.6",
         "drupal/inline_entity_form": "1.0-beta1",
         "drupal/link_attributes": "1.0",
         "drupal/linkit": "5.0-beta6",
diff --git a/composer.lock b/composer.lock
index e6722e912a41ce29e96a34a76368c580c09b653d..658f1aba13f1e2920a08933bb347e4a388e2ef52 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "d94a2c48325f6123c50fa20b7c0207f8",
+    "content-hash": "f43f71f0442201418b3a052289c4c8ae",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -4092,53 +4092,6 @@
                 "source": "http://cgit.drupalcode.org/image_popup"
             }
         },
-        {
-            "name": "drupal/imce",
-            "version": "1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://git.drupal.org/project/imce",
-                "reference": "8.x-1.6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/imce-8.x-1.6.zip",
-                "reference": "8.x-1.6",
-                "shasum": "973fc92959dc31b16e33114852b8c26ec050ba7c"
-            },
-            "require": {
-                "drupal/core": "~8.0"
-            },
-            "type": "drupal-module",
-            "extra": {
-                "branch-alias": {
-                    "dev-1.x": "1.x-dev"
-                },
-                "drupal": {
-                    "version": "8.x-1.6",
-                    "datestamp": "1499898842",
-                    "security-coverage": {
-                        "status": "covered",
-                        "message": "Covered by Drupal's security advisory policy"
-                    }
-                }
-            },
-            "notification-url": "https://packages.drupal.org/8/downloads",
-            "license": [
-                "GPL-2.0+"
-            ],
-            "authors": [
-                {
-                    "name": "ufku",
-                    "homepage": "https://www.drupal.org/user/9910"
-                }
-            ],
-            "description": "Provides a file manager supporting personal folders.",
-            "homepage": "https://drupal.org/project/imce",
-            "support": {
-                "source": "http://cgit.drupalcode.org/imce"
-            }
-        },
         {
             "name": "drupal/inline_entity_form",
             "version": "1.0.0-beta1",
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 4b111a3bb5fba297cc322367ddb73e8814fbb39b..01cd2c6fcbb10c026db54c28f9fd9ed6b52b6898 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -4217,55 +4217,6 @@
             "source": "http://cgit.drupalcode.org/image_popup"
         }
     },
-    {
-        "name": "drupal/imce",
-        "version": "1.6.0",
-        "version_normalized": "1.6.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://git.drupal.org/project/imce",
-            "reference": "8.x-1.6"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/imce-8.x-1.6.zip",
-            "reference": "8.x-1.6",
-            "shasum": "973fc92959dc31b16e33114852b8c26ec050ba7c"
-        },
-        "require": {
-            "drupal/core": "~8.0"
-        },
-        "type": "drupal-module",
-        "extra": {
-            "branch-alias": {
-                "dev-1.x": "1.x-dev"
-            },
-            "drupal": {
-                "version": "8.x-1.6",
-                "datestamp": "1499898842",
-                "security-coverage": {
-                    "status": "covered",
-                    "message": "Covered by Drupal's security advisory policy"
-                }
-            }
-        },
-        "installation-source": "dist",
-        "notification-url": "https://packages.drupal.org/8/downloads",
-        "license": [
-            "GPL-2.0+"
-        ],
-        "authors": [
-            {
-                "name": "ufku",
-                "homepage": "https://www.drupal.org/user/9910"
-            }
-        ],
-        "description": "Provides a file manager supporting personal folders.",
-        "homepage": "https://drupal.org/project/imce",
-        "support": {
-            "source": "http://cgit.drupalcode.org/imce"
-        }
-    },
     {
         "name": "drupal/inline_entity_form",
         "version": "1.0.0-beta1",
diff --git a/web/modules/imce/LICENSE.txt b/web/modules/imce/LICENSE.txt
deleted file mode 100644
index d159169d1050894d3ea3b98e1c965c4058208fe1..0000000000000000000000000000000000000000
--- a/web/modules/imce/LICENSE.txt
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/web/modules/imce/README.txt b/web/modules/imce/README.txt
deleted file mode 100644
index 2733a07b669b666eb1c4b159819e4d520d70c373..0000000000000000000000000000000000000000
--- a/web/modules/imce/README.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-Imce
-http://drupal.org/project/imce
-====================================
-
-
-DESCRIPTION
------------
-Imce is an ajax based file manager that supports personal folders.
-
-
-INSTALLATION
------------
-1. Copy imce directory into your modules(sites/all/modules) directory.
-2. Enable the module at /admin/modules.
-3. Manage configuration profiles at /admin/config/media/imce.
-4. Access your files at /imce
-
-
-CKEDITOR INTEGRATION
------------
-1. Go to /admin/config/content/formats to edit a text format that uses CKEditor.
-2. Enable CKEditor image button without image uploads.
-Image uploads must be disabled in order for IMCE link appear in the image dialog.
-There is also an image button provided by Imce but it can't be used for editing existing images.
-
-
-BUEDITOR INTEGRATION
------------
-1. Edit your editor at /admin/config/content/bueditor.
-2. Select Imce File Manager as the File browser under Settings.
-
-
-FILE/IMAGE FIELD INTEGRATION
------------
-1. Go to form settings of your content type. Ex: /admin/structure/types/manage/article/form-display
-2. Edit widget settings of a file/image field.
-3. Check the box saying "Allow users to select files from Imce File Manager for this field." and save.
-4. You should now see the "Open File Browser" link above the upload widget in the content form.
diff --git a/web/modules/imce/composer.json b/web/modules/imce/composer.json
deleted file mode 100644
index 19e05eb6290fd8cadb6126d210f007a15cfca650..0000000000000000000000000000000000000000
--- a/web/modules/imce/composer.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "name": "drupal/imce",
-  "description": "Provides a file manager supporting personal folders.",
-  "type": "drupal-module",
-  "homepage": "https://drupal.org/project/imce",
-  "license": "GPL-2.0+"
-}
\ No newline at end of file
diff --git a/web/modules/imce/config/install/imce.profile.admin.yml b/web/modules/imce/config/install/imce.profile.admin.yml
deleted file mode 100644
index 85c2f1cc0efb387da1ce28ad62456791486d9e5b..0000000000000000000000000000000000000000
--- a/web/modules/imce/config/install/imce.profile.admin.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Administrator profile
-id: admin
-label: 'Admin profile'
-description: 'Configuration for site administrators'
-conf:
-  extensions: '*'
-  maxsize: 0
-  quota: 0
-  maxwidth: 0
-  maxheight: 0
-  replace: 0
-  folders:
-    - 
-      path: '.'
-      permissions:
-        all: true
-langcode: en
\ No newline at end of file
diff --git a/web/modules/imce/config/install/imce.profile.default.yml b/web/modules/imce/config/install/imce.profile.default.yml
deleted file mode 100644
index 09a177da461476200a6ffc7d0afc207d429f213c..0000000000000000000000000000000000000000
--- a/web/modules/imce/config/install/imce.profile.default.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-# Member profile
-id: member
-label: 'Member profile'
-description: 'Configuration for site members'
-conf:
-  extensions: 'jpg png gif'
-  maxsize: 2
-  quota: 50
-  maxwidth: 1024
-  maxheight: 1024
-  replace: 0
-  folders:
-    - 
-      path: 'users/user[user:uid]'
-      permissions:
-        browse_files: true
-        upload_files: true
-        delete_files: true
-langcode: en
\ No newline at end of file
diff --git a/web/modules/imce/config/install/imce.settings.yml b/web/modules/imce/config/install/imce.settings.yml
deleted file mode 100644
index 6f7652a6bb0e0387d3cf26cd1d5aeac7155d1bcb..0000000000000000000000000000000000000000
--- a/web/modules/imce/config/install/imce.settings.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-abs_urls: false
-admin_theme: false
-roles_profiles: []
diff --git a/web/modules/imce/config/schema/imce.schema.yml b/web/modules/imce/config/schema/imce.schema.yml
deleted file mode 100644
index 4cca3358acdd981b03dc8bbfe8110fb1e4ef4ad4..0000000000000000000000000000000000000000
--- a/web/modules/imce/config/schema/imce.schema.yml
+++ /dev/null
@@ -1,88 +0,0 @@
-# Imce settings
-imce.settings:
-  type: config_object
-  label: 'Imce settings'
-  mapping:
-    abs_urls:
-      type: boolean
-      label: 'Enable absolute URLs'
-    admin_theme:
-      type: boolean
-      label: 'Use admin theme for IMCE paths'
-    roles_profiles:
-      type: sequence
-      label: 'Role-profile assignments'
-      sequence: 
-        - type: sequence
-          sequence:
-            - type: string
-
-# Imce Profile entity
-imce.profile.*:
-  type: config_entity
-  label: 'Imce Profile'
-  mapping:
-    id:
-      type: string
-      label: 'ID'
-    label:
-      type: label
-      label: 'Name'
-    description:
-      type: label
-      label: 'Description'
-    conf:
-      type: sequence
-      label: 'Configuration'
-      sequence:
-        - type: imce.profile_conf.[%key]
-
-# Profile configuration options
-imce.profile_conf.extensions:
-  type: string
-  label: 'Allowed file extensions'
-
-imce.profile_conf.maxsize:
-  type: float
-  label: 'Maximum file size'
-
-imce.profile_conf.quota:
-  type: float
-  label: 'Disk quota'
-
-imce.profile_conf.maxwidth:
-  type: integer
-  label: 'Maximum image width'
-
-imce.profile_conf.maxheight:
-  type: integer
-  label: 'Maximum image height'
-
-imce.profile_conf.replace:
-  type: integer
-  label: 'Upload replace method'
-
-imce.profile_conf.folders:
-  type: sequence
-  label: 'Folders'
-  sequence:
-    - type: mapping
-      label: 'Folder'
-      mapping:
-        path:
-          type: string
-          label: 'Path'
-        permissions:
-          type: sequence
-          label: 'Permissions'
-          sequence:
-            - type: boolean
-
-# File field settings
-field.widget.third_party.imce:
-  type: mapping
-  label: 'Imce field widget settings'
-  mapping:
-    enabled:
-      type: boolean
-      label: 'Imce enabled'
diff --git a/web/modules/imce/css/fonts/imce-icons.eot b/web/modules/imce/css/fonts/imce-icons.eot
deleted file mode 100644
index 29500655a9f5cd0be0d39062f4c27867212668fc..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/fonts/imce-icons.eot
+++ /dev/null
@@ -1,28 +0,0 @@
-���$������������������������LP�����������������������G����������������������i�m�c�e�-�i�c�o�n�s����R�e�g�u�l�a�r����V�e�r�s�i�o�n� �1�.�0����i�m�c�e�-�i�c�o�n�s�������������0OS/2M�������`cmapU�z�����Lgasp�����h���glyfUz`>��p���head�?I��4���6hhea����l���$hmtx����������locav�qB��0���Rmaxp�6�������� name��������`post�������� ������������������3	�������������������������������@���#����@��@�������������� ������������������8���
-����� �#��������� ��������������������������������������79���������������79���������������79������������"�/�6��8181!8181!5!"3!2654&#1#"&54632!537������&&�&&�8((88((8@����@�@���@&��&&�&�(88((88(�����������@������"�9��.'.'.#!"3!2654&''#5#!"&54630:1;�-3')�!//!�!/�%
�)o	� 		���
��3-/!��!//!p)'6)�
%��		`	�
�����@������"�9�H�W�f��.'.'.#!"3!2654&''#5#!"&54630:1;'!"&5463!2#5!"&5463!2#5!"&5463!2#�-3')�!//!�!/�%
�)o	� 		���
��@

�

�@

�

�@

�

�3-/!��!//!p)'6)�
%��		`	�
��p



�



�



����@�������-�6�M��%!57#"&546327.'.'.#!"3!2654&''#5#!"&54630:1;@����8((88((8V-3')�!//!�!/�%
�)o	� 		���
�@�@������(88((88(�3-/!��!//!p)'6)�
%��		`	�
����@������$�;�c��.'.'.#!"3!2654&'1'#51#!"&54630:1;..#"326=%.#"32654&'�-3')�!//!�!/�%
�)o	� 		���
����!5KK55K�!5KK55K�3-/!��!//!p)'6)�
%��		`	�
��)@�8((88(�3�8((88(@
���@�������&�=��
%.'.'.#!"3!2654&''#5#!"&54630:1;�@��-3')�!//!�!/�%
�)o	� 		���
�@����3-/!��!//!p)'6)�
%��		`	�
���
�@������&�=�B�G�L�Q�V�[�`�e�u�z��.'.'.#!"3!2654&'9'#59#!"&54630:1;3#53#53#53#53#53#53#53#5;26=4&+5#7#53�-3')�!//!�!/�%
�)o	� 		���
����������������������������P�����3-/!��!//!p)'6)�
%��		`	�
��p@@@@@@@@@@@@@@@@@@@@@@@���@��P@@����������	�
���!��!!!!%#735!!#7!35!��@������@ee��@����ee����@���������ee��������eee���������@�������6�:�A��#54&+"#!5+58138154&+3#!35#"3!!##7!35!��&�&�����@
@ ���� @

 ����ee����@@@&&@��@@��
@����@@
��
��[ee���������������@���!!�����@��@@��������@��
-��%!!!@������ ������@��@�����������@����'!!!##5#53533@��@��@�������������@���������������#�8��%'.>54.#"326776&'%".54>32#��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]5Y�2�GP�i<<i�PP�i<1+'�K�(F]55]F((F]55]F(����@�����
-�����3�8��3!265!#33#33#33#3#54&+"#"!54&#!#53�&@&�@�@@�@@�@@�@@����@�������&&�����@��@��@��@�PPPP??��������������	33!!!#53�������`� �� ����������������@@������������
-���!!!#53	##�� �� ����`���������@@������@�����������>�K��"32>7.##"&'.'>7>732>54&'1#"&54632�T��j$$j��TT��j$$j��T�.KK.8�CC�8.KK.(F]55]F(�8((88((8�/TvGGvT//TvGGvT/�M--M$&&$M--M,5]F((F]5,6(88((88(�����������"�1��	!5"3!26'1.#1#"&54632'"&=4632#�����
�K%3f3%�K
@%%%%@%%%%c��W]��,@@,g��%%%%�%�%%�%������������9�O��3#2#575!5!'"32>7>54.'.#512#".54>3����%�������*PKD--DKP**PKD--DKP*j��PP��jj��PP��j��@%��@�@��-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P�����������/�D��46;2+"&=!535#533"32>54.#".54>32#�  ���@@�@�j��PP��jj��PP��jV�qAAq�VV�qAAq�V�  �0@�@���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA��������(�5�B��.#"32>7>54.'>32!467#".5j$T\c33c\T$$8&&8$$T\c33c\T$$8&&8$&!��/q>O�i<��&!/q>O�i<*$8&&8$$T\c33c\T$$8&&8$$T\c33c\T$��>q/!&<i�O>q/��!&<i�O���� �@���	'	`� ���@� �������������3��.#"34>32!#".'7!732>5#z#U`j8j��P`Aq�V.WOE�`�&Aq�V.WOE����#U`j8j��P`&>+P��jV�qA$3 �`���V�qA$3 ����&>+P��j��� ������&�A�E��%##7#!"&'&47#"&5463!232#.#"326?37>'%7#@����`��	��

�	��

]�		�		7�7	��LL���������	N

	��

n�
-
-��		nn	��������������!"3!2654&#'7���5KK5�5KK5�@�Z�3Z�s�K5��5KK5�5K���Z�2Z�r������������7'!5##3!3535#!!@�@��@���������@��@@����@����������@��@��@������.����:�V�c���.'>'./.'.>767>&'81'.'&67>7>"&54632#&'81.'.7>76�AFDP�
��
�PDFADFA��AFD�Y44�



�44'8| 0'��T'0��|8''RK=7'��'7=KR'x$$6#$6 



��$$6$#6�����@�����K�U�c�t����������.'".'.'>706'4&/.+""3267>73267>7>'4&'>7>72.50631>7>71%#"&'>321.'.'.#!"3!2654&'1'#51#!"&54630:1;J
--#8

-/
-
 ,8M2;�:,d"
-��,"	#1
-
-O	*3Y'�0 
-Y-3')�!//!�!/�%
�)o	� 		���
�s
-
-
-I)�
-$lF ?3	9	RX
-
-�8	83f*#40�K#7 5
-�3-/!��!//!p)'6)�
%��		`	�
������@������*�4�K��3##33#%.'.'.#!"3!2654&'1'#51#!"&54630:1;�,3BkM:oqmLDe��-3')�!//!�!/�%
�)o	� 		���
���>��>��/���\�3-/!��!//!p)'6)�
%��		`	�
����@������)�3�J��#'#35#7377.'.'.#!"3!2654&'1'#51#!"&54630:1;�``����22o����-3')�!//!�!/�%
�)o	� 		���
�@�����\K��3-/!��!//!p)'6)�
%��		`	�
������:����9��%4'&#!"'&=4'&+"3!2765#!"'&5476;2!2��S��N((8�8)(()8�8((�8((��'����R8((((8J8((((8((8�������@�������������u@��@��5������������!��"32>54.###5#53533�j��PP��jj��PP��j��������P��jj��PP��jj��P���������������������"32>54.#!5!�j��PP��jj��PP��j�����P��jj��PP��jj��P������������$��!4&+"!"3!;265!26=4&#���
�
��

`
�
`

@`

��
�
��

`
�
��������T��%81	81>76&/.81	81.'&81	817>781	816?>'.'���7�	����	�7���	77	��77	���7�	����	�7���	���������ÞG_<��������j}f�����j}f����������������������������������������������(��������������������@��@��@��@��@��@�����@��������������@���������������������������� ��������.��@��@��@����������������������
-���h��J�D�F���.���"��L� l�6�
-
-�
-�@X���b������(���
�������������������������������������������\��������*��������j���������������
-�>������
-�4�~��	������	���\��	���*��	���j��	�����	���H��	�
-�4�~�i�m�c�e�-�i�c�o�n�s�V�e�r�s�i�o�n� �1�.�0�i�m�c�e�-�i�c�o�n�simce-icons�i�m�c�e�-�i�c�o�n�s�R�e�g�u�l�a�r�i�m�c�e�-�i�c�o�n�s�F�o�n�t� �g�e�n�e�r�a�t�e�d� �b�y� �I�c�o�M�o�o�n�.�������������������������������
\ No newline at end of file
diff --git a/web/modules/imce/css/fonts/imce-icons.svg b/web/modules/imce/css/fonts/imce-icons.svg
deleted file mode 100644
index ff246b28556220bd4fcac090cbbe07380e093350..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/fonts/imce-icons.svg
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by IcoMoon</metadata>
-<defs>
-<font id="imce-icons" horiz-adv-x="1024">
-<font-face units-per-em="1024" ascent="960" descent="-64" />
-<missing-glyph horiz-adv-x="1024" />
-<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
-<glyph unicode="&#xe600;" d="M959.884 832c0.040-0.034 0.082-0.076 0.116-0.116v-767.77c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.772c0.034 0.040 0.076 0.082 0.114 0.114h895.77zM960 896h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64v0zM832 672c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM896 128h-768v128l224 384 256-320h64l224 192z" />
-<glyph unicode="&#xe601;" d="M917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
-<glyph unicode="&#xe602;" d="M917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624zM736 128h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32zM736 256h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32zM736 384h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32z" />
-<glyph unicode="&#xe603;" d="M832 64h-640v128l192 320 263-320 185 128v-256zM832 480c0-53.020-42.98-96-96-96-53.022 0-96 42.98-96 96s42.978 96 96 96c53.020 0 96-42.98 96-96zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
-<glyph unicode="&#xe604;" d="M917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624zM756.288 568.748c-7.414 6.080-17.164 8.514-26.562 6.632l-320-64c-14.958-2.994-25.726-16.126-25.726-31.38v-236.876c-18.832 8.174-40.678 12.876-64 12.876-70.692 0-128-42.98-128-96s57.308-96 128-96 128 42.98 128 96v229.766l256 51.202v-133.842c-18.832 8.174-40.678 12.876-64 12.876-70.692 0-128-42.98-128-96s57.308-96 128-96 128 42.98 128 96v319.998c0 9.586-4.298 18.668-11.712 24.748z" />
-<glyph unicode="&#xe605;" d="M384 576l320-224-320-224v448zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" />
-<glyph unicode="&#xe606;" d="M917.806 730.924c-22.208 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.884-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0 0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.98-17.78 50.678-41.878 81.374-72.572v0 0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.322-32 32-32h224v-624zM256 896h128v-64h-128v64zM384 832h128v-64h-128v64zM256 768h128v-64h-128v64zM384 704h128v-64h-128v64zM256 640h128v-64h-128v64zM384 576h128v-64h-128v64zM256 512h128v-64h-128v64zM384 448h128v-64h-128v64zM256 112c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-80v64h-128v-272zM448 192v-64h-128v64h128z" />
-<glyph unicode="&#xe607;" d="M640 704v256h-448l-192-192v-576h384v-256h640v768h-384zM192 869.49v-101.49h-101.49l101.49 101.49zM64 256v448h192v192h320v-192l-192-192v-256h-320zM576 613.49v-101.49h-101.49l101.49 101.49zM960 0h-512v448h192v192h320v-640z" />
-<glyph unicode="&#xe608;" d="M704 832h-128v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-128v-128h512v128zM512 832h-128v63.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886zM832 640v160c0 17.6-14.4 32-32 32h-64v-64h32v-128h-192l-192-192v-256h-256v576h32v64h-64c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM576 549.49v-101.49h-101.49l101.49 101.49zM960 0h-512v384h192v192h320v-576z" />
-<glyph unicode="&#xe609;" d="M448 832l128-128h448v-704h-1024v832z" />
-<glyph unicode="&#xe60a;" d="M832 0l192 512h-832l-192-512zM128 576l-128-576v832h288l128-128h416v-128z" />
-<glyph unicode="&#xe60b;" d="M576 704l-128 128h-448v-832h1024v704h-448zM704 256h-128v-128h-128v128h-128v128h128v128h128v-128h128v-128z" />
-<glyph unicode="&#xe60c;" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" />
-<glyph unicode="&#xe60d;" d="M128 640v-640c0-35.2 28.8-64 64-64h576c35.2 0 64 28.8 64 64v640h-704zM320 64h-64v448h64v-448zM448 64h-64v448h64v-448zM576 64h-64v448h64v-448zM704 64h-64v448h64v-448zM848 832h-208v80c0 26.4-21.6 48-48 48h-224c-26.4 0-48-21.6-48-48v-80h-208c-26.4 0-48-21.6-48-48v-80h832v80c0 26.4-21.6 48-48 48zM576 832h-192v63.198h192v-63.198z" />
-<glyph unicode="&#xe60e;" d="M736 512l-256-256-256 256h160v384h192v-384zM480 256h-480v-256h960v256h-480zM896 128h-128v64h128v-64z" />
-<glyph unicode="&#xe60f;" d="M480 256h-480v-256h960v256h-480zM896 128h-128v64h128v-64zM224 640l256 256 256-256h-160v-320h-192v320z" />
-<glyph unicode="&#xe610;" d="M512 768c-223.318 0-416.882-130.042-512-320 95.118-189.958 288.682-320 512-320 223.312 0 416.876 130.042 512 320-95.116 189.958-288.688 320-512 320zM764.45 598.296c60.162-38.374 111.142-89.774 149.434-150.296-38.292-60.522-89.274-111.922-149.436-150.296-75.594-48.218-162.89-73.704-252.448-73.704-89.56 0-176.858 25.486-252.452 73.704-60.158 38.372-111.138 89.772-149.432 150.296 38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.86 7.3-9.96-27.328-15.41-56.822-15.41-87.596 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 30.774-5.452 60.268-15.408 87.598 3.978-2.378 7.938-4.802 11.858-7.302v0zM512 544c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.982 96-96z" />
-<glyph unicode="&#xe611;" d="M512 867.226l429.102-855.226h-858.206l429.104 855.226zM512 960c-22.070 0-44.14-14.882-60.884-44.648l-437.074-871.112c-33.486-59.532-5-108.24 63.304-108.24h869.308c68.3 0 96.792 48.708 63.3 108.24h0.002l-437.074 871.112c-16.742 29.766-38.812 44.648-60.882 44.648v0zM576 128c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.346 28.654 64 64 64s64-28.654 64-64zM512 256c-35.346 0-64 28.654-64 64v192c0 35.346 28.654 64 64 64s64-28.654 64-64v-192c0-35.346-28.654-64-64-64z" />
-<glyph unicode="&#xe612;" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
-<glyph unicode="&#xe613;" d="M448 656c0 26.4 21.6 48 48 48h32c26.4 0 48-21.6 48-48v-32c0-26.4-21.6-48-48-48h-32c-26.4 0-48 21.6-48 48v32zM640 192h-256v64h64v192h-64v64h192v-256h64zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416z" />
-<glyph unicode="&#xe614;" d="M874.040 810.040c-96.706 96.702-225.28 149.96-362.040 149.96s-265.334-53.258-362.040-149.96c-96.702-96.706-149.96-225.28-149.96-362.040s53.258-265.334 149.96-362.040c96.706-96.702 225.28-149.96 362.040-149.96s265.334 53.258 362.040 149.96c96.702 96.706 149.96 225.28 149.96 362.040s-53.258 265.334-149.96 362.040zM896 448c0-82.814-26.354-159.588-71.112-222.38l-535.266 535.268c62.792 44.758 139.564 71.112 222.378 71.112 211.738 0 384-172.262 384-384zM128 448c0 82.814 26.354 159.586 71.112 222.378l535.27-535.268c-62.794-44.756-139.568-71.11-222.382-71.11-211.738 0-384 172.262-384 384z" />
-<glyph unicode="&#xe615;" d="M864 832l-480-480-224 224-160-160 384-384 640 640z" />
-<glyph unicode="&#xe616;" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
-<glyph unicode="&#xe617;" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM928-64h-256c-11.8 0-22.644 6.496-28.214 16.9-5.566 10.404-4.958 23.030 1.59 32.85l222.832 334.25h-196.208c-17.672 0-32 14.328-32 32s14.328 32 32 32h256c11.8 0 22.644-6.496 28.214-16.9 5.566-10.404 4.958-23.030-1.59-32.85l-222.83-334.25h196.206c17.672 0 32-14.328 32-32s-14.328-32-32-32zM1020.622 558.314l-192.002 384c-5.42 10.842-16.502 17.69-28.622 17.69-12.122 0-23.202-6.848-28.624-17.69l-191.996-384c-7.904-15.806-1.496-35.030 14.31-42.932 4.594-2.296 9.476-3.386 14.288-3.386 11.736 0 23.040 6.484 28.644 17.698l55.156 110.31h216.446l55.156-110.31c7.902-15.806 27.124-22.21 42.932-14.31 15.808 7.902 22.216 27.124 14.312 42.93zM723.778 704.004l76.22 152.446 76.224-152.446h-152.444z" />
-<glyph unicode="&#xe618;" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM448 165.49l-237.254 237.256 90.51 90.508 146.744-146.744 306.746 306.746 90.508-90.51-397.254-397.256z" />
-<glyph unicode="&#xe619;" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" />
-<glyph unicode="&#xe61a;" d="M913.826 280.306c-66.684 104.204-181.078 150.064-255.51 102.434-6.428-4.116-12.334-8.804-17.744-13.982l-79.452 124.262 183.462 287.972c15.016 27.73 20.558 60.758 13.266 93.974-6.972 31.75-24.516 58.438-48.102 77.226l-12.278 7.808-217.468-340.114-217.47 340.114-12.276-7.806c-23.586-18.79-41.13-45.476-48.1-77.226-7.292-33.216-1.75-66.244 13.264-93.974l183.464-287.972-79.454-124.262c-5.41 5.178-11.316 9.868-17.744 13.982-74.432 47.63-188.826 1.77-255.51-102.434-66.68-104.2-60.398-227.286 14.032-274.914 74.43-47.632 188.824-1.77 255.508 102.432l164.286 257.87 164.288-257.872c66.684-104.202 181.078-150.064 255.508-102.432 74.428 47.63 80.71 170.716 14.030 274.914zM234.852 159.57c-30.018-46.904-68.534-69.726-94.572-75.446-0.004 0-0.004 0-0.004 0-8.49-1.868-20.294-3.010-28.324 2.128-8.898 5.694-14.804 20.748-15.8 40.276-1.616 31.644 9.642 68.836 30.888 102.034 30.014 46.906 68.53 69.726 94.562 75.444 8.496 1.866 20.308 3.010 28.336-2.126 8.898-5.694 14.802-20.75 15.798-40.272 1.618-31.65-9.64-68.84-30.884-102.038zM480 448c-17.672 0-32 14.328-32 32s14.328 32 32 32 32-14.328 32-32-14.328-32-32-32zM863.85 126.53c-0.996-19.528-6.902-34.582-15.8-40.276-8.030-5.138-19.834-3.996-28.324-2.128 0 0 0 0-0.004 0-26.040 5.718-64.554 28.542-94.572 75.446-21.244 33.198-32.502 70.388-30.884 102.038 0.996 19.522 6.9 34.578 15.798 40.272 8.028 5.136 19.84 3.992 28.336 2.126 26.034-5.716 64.548-28.538 94.562-75.444 21.246-33.198 32.502-70.39 30.888-102.034z" />
-<glyph unicode="&#xe61b;" d="M842.012 370.52c-13.648 13.446-43.914 20.566-89.972 21.172-31.178 0.344-68.702-2.402-108.17-7.928-17.674 10.198-35.892 21.294-50.188 34.658-38.462 35.916-70.568 85.772-90.576 140.594 1.304 5.12 2.414 9.62 3.448 14.212 0 0 21.666 123.060 15.932 164.666-0.792 5.706-1.276 7.362-2.808 11.796l-1.882 4.834c-5.894 13.592-17.448 27.994-35.564 27.208l-10.916 0.344c-20.202 0-36.664-10.332-40.986-25.774-13.138-48.434 0.418-120.892 24.98-214.738l-6.288-15.286c-17.588-42.876-39.63-86.060-59.078-124.158l-2.528-4.954c-20.46-40.040-39.026-74.028-55.856-102.822l-17.376-9.188c-1.264-0.668-31.044-16.418-38.028-20.644-59.256-35.38-98.524-75.542-105.038-107.416-2.072-10.17-0.53-23.186 10.014-29.212l16.806-8.458c7.292-3.652 14.978-5.502 22.854-5.502 42.206 0 91.202 52.572 158.698 170.366 77.93 25.37 166.652 46.458 244.412 58.090 59.258-33.368 132.142-56.544 178.142-56.544 8.168 0 15.212 0.78 20.932 2.294 8.822 2.336 16.258 7.368 20.792 14.194 8.926 13.432 10.734 31.932 8.312 50.876-0.72 5.622-5.21 12.574-10.068 17.32zM211.646 145.952c7.698 21.042 38.16 62.644 83.206 99.556 2.832 2.296 9.808 8.832 16.194 14.902-47.104-75.124-78.648-105.066-99.4-114.458zM478.434 760.314c13.566 0 21.284-34.194 21.924-66.254s-6.858-54.56-16.158-71.208c-7.702 24.648-11.426 63.5-11.426 88.904 0 0-0.566 48.558 5.66 48.558v0zM398.852 322.506c9.45 16.916 19.282 34.756 29.33 53.678 24.492 46.316 39.958 82.556 51.478 112.346 22.91-41.684 51.444-77.12 84.984-105.512 4.186-3.542 8.62-7.102 13.276-10.65-68.21-13.496-127.164-29.91-179.068-49.862v0zM828.902 326.348c-4.152-2.598-16.052-4.1-23.708-4.1-24.708 0-55.272 11.294-98.126 29.666 16.468 1.218 31.562 1.838 45.102 1.838 24.782 0 32.12 0.108 56.35-6.072 24.228-6.18 24.538-18.734 20.382-21.332v0zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" />
-<glyph unicode="&#xe61c;" d="M639.778 484.108h44.21l-51.012-226.178-66.324 318.010h-106.55l-77.114-318.010-57.816 318.010h-111.394l113.092-511.88h108.838l76.294 302.708 68.256-302.708h100.336l129.628 511.88h-170.446v-91.832zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" />
-<glyph unicode="&#xe61d;" d="M743.028 576h-135.292l-95.732-141.032-95.742 141.032h-135.29l162.162-242.464-182.972-269.536h251.838v91.576h-50.156l50.156 74.994 111.396-166.57h140.444l-182.976 269.536 162.164 242.464zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" />
-<glyph unicode="&#xe61e;" d="M934.395 194.438v429.105q0 24.381-17.067 41.447t-41.447 17.067h-429.105q-24.381 0-41.447 17.067t-17.067 41.447v39.009q0 24.381-17.067 41.447t-41.447 17.067h-195.047q-24.381 0-41.447-17.067t-17.067-41.447v-585.142q0-24.381 17.067-41.447t41.447-17.067h741.181q24.381 0 41.447 17.067t17.067 41.447zM1012.414 623.542v-429.105q0-56.076-40.228-96.305t-96.305-40.228h-741.181q-56.076 0-96.305 40.228t-40.228 96.305v585.142q0 56.076 40.228 96.305t96.305 40.228h195.047q56.076 0 96.305-40.228t40.228-96.305v-19.505h409.6q56.076 0 96.305-40.228t40.228-96.305z" horiz-adv-x="1015" />
-<glyph unicode="&#xe61f;" d="M534.048 395.040l169.952-395.040-128-64-148.672 405.696-235.328-213.696v832l640-512-297.952-52.96z" />
-<glyph unicode="&#xe620;" d="M512 960c-282.752 0-512-229.248-512-512s229.248-512 512-512 512 229.248 512 512-229.248 512-512 512zM768 384h-192v-192h-128v192h-192v128h192v192h128v-192h192v-128z" />
-<glyph unicode="&#xe621;" d="M512 960c-282.752 0-512-229.248-512-512s229.248-512 512-512 512 229.248 512 512-229.248 512-512 512zM768 384h-512v128h512v-128z" />
-<glyph unicode="&#xe622;" d="M992 576h-352v352c0 17.672-14.328 32-32 32h-192c-17.672 0-32-14.328-32-32v-352h-352c-17.672 0-32-14.328-32-32v-192c0-17.672 14.328-32 32-32h352v-352c0-17.672 14.328-32 32-32h192c17.672 0 32 14.328 32 32v352h352c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32z" />
-<glyph unicode="&#xe623;" d="M1014.662 137.34c-0.004 0.004-0.008 0.008-0.012 0.010l-310.644 310.65 310.644 310.65c0.004 0.004 0.008 0.006 0.012 0.010 3.344 3.346 5.762 7.254 7.312 11.416 4.246 11.376 1.824 24.682-7.324 33.83l-146.746 146.746c-9.148 9.146-22.45 11.566-33.828 7.32-4.16-1.55-8.070-3.968-11.418-7.31 0-0.004-0.004-0.006-0.008-0.010l-310.648-310.652-310.648 310.65c-0.004 0.004-0.006 0.006-0.010 0.010-3.346 3.342-7.254 5.76-11.414 7.31-11.38 4.248-24.682 1.826-33.83-7.32l-146.748-146.748c-9.148-9.148-11.568-22.452-7.322-33.828 1.552-4.16 3.97-8.072 7.312-11.416 0.004-0.002 0.006-0.006 0.010-0.010l310.65-310.648-310.65-310.652c-0.002-0.004-0.006-0.006-0.008-0.010-3.342-3.346-5.76-7.254-7.314-11.414-4.248-11.376-1.826-24.682 7.322-33.83l146.748-146.746c9.15-9.148 22.452-11.568 33.83-7.322 4.16 1.552 8.070 3.97 11.416 7.312 0.002 0.004 0.006 0.006 0.010 0.010l310.648 310.65 310.648-310.65c0.004-0.002 0.008-0.006 0.012-0.008 3.348-3.344 7.254-5.762 11.414-7.314 11.378-4.246 24.684-1.826 33.828 7.322l146.746 146.748c9.148 9.148 11.57 22.454 7.324 33.83-1.552 4.16-3.97 8.068-7.314 11.414z" />
-</font></defs></svg>
\ No newline at end of file
diff --git a/web/modules/imce/css/fonts/imce-icons.ttf b/web/modules/imce/css/fonts/imce-icons.ttf
deleted file mode 100644
index 6ea814ed36851b2bb9b6cd1304bde805bd0ea081..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/fonts/imce-icons.ttf
+++ /dev/null
@@ -1,28 +0,0 @@
-��������0OS/2M�������`cmapU�z�����Lgasp�����h���glyfUz`>��p���head�?I��4���6hhea����l���$hmtx����������locav�qB��0���Rmaxp�6�������� name��������`post�������� ������������������3	�������������������������������@���#����@��@�������������� ������������������8���
-����� �#��������� ��������������������������������������79���������������79���������������79������������"�/�6��8181!8181!5!"3!2654&#1#"&54632!537������&&�&&�8((88((8@����@�@���@&��&&�&�(88((88(�����������@������"�9��.'.'.#!"3!2654&''#5#!"&54630:1;�-3')�!//!�!/�%
�)o	� 		���
��3-/!��!//!p)'6)�
%��		`	�
�����@������"�9�H�W�f��.'.'.#!"3!2654&''#5#!"&54630:1;'!"&5463!2#5!"&5463!2#5!"&5463!2#�-3')�!//!�!/�%
�)o	� 		���
��@

�

�@

�

�@

�

�3-/!��!//!p)'6)�
%��		`	�
��p



�



�



����@�������-�6�M��%!57#"&546327.'.'.#!"3!2654&''#5#!"&54630:1;@����8((88((8V-3')�!//!�!/�%
�)o	� 		���
�@�@������(88((88(�3-/!��!//!p)'6)�
%��		`	�
����@������$�;�c��.'.'.#!"3!2654&'1'#51#!"&54630:1;..#"326=%.#"32654&'�-3')�!//!�!/�%
�)o	� 		���
����!5KK55K�!5KK55K�3-/!��!//!p)'6)�
%��		`	�
��)@�8((88(�3�8((88(@
���@�������&�=��
%.'.'.#!"3!2654&''#5#!"&54630:1;�@��-3')�!//!�!/�%
�)o	� 		���
�@����3-/!��!//!p)'6)�
%��		`	�
���
�@������&�=�B�G�L�Q�V�[�`�e�u�z��.'.'.#!"3!2654&'9'#59#!"&54630:1;3#53#53#53#53#53#53#53#5;26=4&+5#7#53�-3')�!//!�!/�%
�)o	� 		���
����������������������������P�����3-/!��!//!p)'6)�
%��		`	�
��p@@@@@@@@@@@@@@@@@@@@@@@���@��P@@����������	�
���!��!!!!%#735!!#7!35!��@������@ee��@����ee����@���������ee��������eee���������@�������6�:�A��#54&+"#!5+58138154&+3#!35#"3!!##7!35!��&�&�����@
@ ���� @

 ����ee����@@@&&@��@@��
@����@@
��
��[ee���������������@���!!�����@��@@��������@��
-��%!!!@������ ������@��@�����������@����'!!!##5#53533@��@��@�������������@���������������#�8��%'.>54.#"326776&'%".54>32#��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]5Y�2�GP�i<<i�PP�i<1+'�K�(F]55]F((F]55]F(����@�����
-�����3�8��3!265!#33#33#33#3#54&+"#"!54&#!#53�&@&�@�@@�@@�@@�@@����@�������&&�����@��@��@��@�PPPP??��������������	33!!!#53�������`� �� ����������������@@������������
-���!!!#53	##�� �� ����`���������@@������@�����������>�K��"32>7.##"&'.'>7>732>54&'1#"&54632�T��j$$j��TT��j$$j��T�.KK.8�CC�8.KK.(F]55]F(�8((88((8�/TvGGvT//TvGGvT/�M--M$&&$M--M,5]F((F]5,6(88((88(�����������"�1��	!5"3!26'1.#1#"&54632'"&=4632#�����
�K%3f3%�K
@%%%%@%%%%c��W]��,@@,g��%%%%�%�%%�%������������9�O��3#2#575!5!'"32>7>54.'.#512#".54>3����%�������*PKD--DKP**PKD--DKP*j��PP��jj��PP��j��@%��@�@��-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P�����������/�D��46;2+"&=!535#533"32>54.#".54>32#�  ���@@�@�j��PP��jj��PP��jV�qAAq�VV�qAAq�V�  �0@�@���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA��������(�5�B��.#"32>7>54.'>32!467#".5j$T\c33c\T$$8&&8$$T\c33c\T$$8&&8$&!��/q>O�i<��&!/q>O�i<*$8&&8$$T\c33c\T$$8&&8$$T\c33c\T$��>q/!&<i�O>q/��!&<i�O���� �@���	'	`� ���@� �������������3��.#"34>32!#".'7!732>5#z#U`j8j��P`Aq�V.WOE�`�&Aq�V.WOE����#U`j8j��P`&>+P��jV�qA$3 �`���V�qA$3 ����&>+P��j��� ������&�A�E��%##7#!"&'&47#"&5463!232#.#"326?37>'%7#@����`��	��

�	��

]�		�		7�7	��LL���������	N

	��

n�
-
-��		nn	��������������!"3!2654&#'7���5KK5�5KK5�@�Z�3Z�s�K5��5KK5�5K���Z�2Z�r������������7'!5##3!3535#!!@�@��@���������@��@@����@����������@��@��@������.����:�V�c���.'>'./.'.>767>&'81'.'&67>7>"&54632#&'81.'.7>76�AFDP�
��
�PDFADFA��AFD�Y44�



�44'8| 0'��T'0��|8''RK=7'��'7=KR'x$$6#$6 



��$$6$#6�����@�����K�U�c�t����������.'".'.'>706'4&/.+""3267>73267>7>'4&'>7>72.50631>7>71%#"&'>321.'.'.#!"3!2654&'1'#51#!"&54630:1;J
--#8

-/
-
 ,8M2;�:,d"
-��,"	#1
-
-O	*3Y'�0 
-Y-3')�!//!�!/�%
�)o	� 		���
�s
-
-
-I)�
-$lF ?3	9	RX
-
-�8	83f*#40�K#7 5
-�3-/!��!//!p)'6)�
%��		`	�
������@������*�4�K��3##33#%.'.'.#!"3!2654&'1'#51#!"&54630:1;�,3BkM:oqmLDe��-3')�!//!�!/�%
�)o	� 		���
���>��>��/���\�3-/!��!//!p)'6)�
%��		`	�
����@������)�3�J��#'#35#7377.'.'.#!"3!2654&'1'#51#!"&54630:1;�``����22o����-3')�!//!�!/�%
�)o	� 		���
�@�����\K��3-/!��!//!p)'6)�
%��		`	�
������:����9��%4'&#!"'&=4'&+"3!2765#!"'&5476;2!2��S��N((8�8)(()8�8((�8((��'����R8((((8J8((((8((8�������@�������������u@��@��5������������!��"32>54.###5#53533�j��PP��jj��PP��j��������P��jj��PP��jj��P���������������������"32>54.#!5!�j��PP��jj��PP��j�����P��jj��PP��jj��P������������$��!4&+"!"3!;265!26=4&#���
�
��

`
�
`

@`

��
�
��

`
�
��������T��%81	81>76&/.81	81.'&81	817>781	816?>'.'���7�	����	�7���	77	��77	���7�	����	�7���	���������ÞG_<��������j}f�����j}f����������������������������������������������(��������������������@��@��@��@��@��@�����@��������������@���������������������������� ��������.��@��@��@����������������������
-���h��J�D�F���.���"��L� l�6�
-
-�
-�@X���b������(���
�������������������������������������������\��������*��������j���������������
-�>������
-�4�~��	������	���\��	���*��	���j��	�����	���H��	�
-�4�~�i�m�c�e�-�i�c�o�n�s�V�e�r�s�i�o�n� �1�.�0�i�m�c�e�-�i�c�o�n�simce-icons�i�m�c�e�-�i�c�o�n�s�R�e�g�u�l�a�r�i�m�c�e�-�i�c�o�n�s�F�o�n�t� �g�e�n�e�r�a�t�e�d� �b�y� �I�c�o�M�o�o�n�.�������������������������������
\ No newline at end of file
diff --git a/web/modules/imce/css/fonts/imce-icons.woff b/web/modules/imce/css/fonts/imce-icons.woff
deleted file mode 100644
index 2a061213e5d9cac16c2ab02c93dbb598137a0702..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/fonts/imce-icons.woff
+++ /dev/null
@@ -1,28 +0,0 @@
-wOFF�����p�����$�����������������������OS/2�����`���`Mcmap��h���L���LU�zgasp������������glyf���������Uz`>head������6���6�?Ihhea������$���$��hmtx��������������loca��|���R���Rv�qBmaxp������ ��� �6��name�����`��`���post��P��� ��� ���������������������3	�������������������������������@���#����@��@�������������� ������������������8���
-����� �#��������� ��������������������������������������79���������������79���������������79������������"�/�6��8181!8181!5!"3!2654&#1#"&54632!537������&&�&&�8((88((8@����@�@���@&��&&�&�(88((88(�����������@������"�9��.'.'.#!"3!2654&''#5#!"&54630:1;�-3')�!//!�!/�%
�)o	� 		���
��3-/!��!//!p)'6)�
%��		`	�
�����@������"�9�H�W�f��.'.'.#!"3!2654&''#5#!"&54630:1;'!"&5463!2#5!"&5463!2#5!"&5463!2#�-3')�!//!�!/�%
�)o	� 		���
��@

�

�@

�

�@

�

�3-/!��!//!p)'6)�
%��		`	�
��p



�



�



����@�������-�6�M��%!57#"&546327.'.'.#!"3!2654&''#5#!"&54630:1;@����8((88((8V-3')�!//!�!/�%
�)o	� 		���
�@�@������(88((88(�3-/!��!//!p)'6)�
%��		`	�
����@������$�;�c��.'.'.#!"3!2654&'1'#51#!"&54630:1;..#"326=%.#"32654&'�-3')�!//!�!/�%
�)o	� 		���
����!5KK55K�!5KK55K�3-/!��!//!p)'6)�
%��		`	�
��)@�8((88(�3�8((88(@
���@�������&�=��
%.'.'.#!"3!2654&''#5#!"&54630:1;�@��-3')�!//!�!/�%
�)o	� 		���
�@����3-/!��!//!p)'6)�
%��		`	�
���
�@������&�=�B�G�L�Q�V�[�`�e�u�z��.'.'.#!"3!2654&'9'#59#!"&54630:1;3#53#53#53#53#53#53#53#5;26=4&+5#7#53�-3')�!//!�!/�%
�)o	� 		���
����������������������������P�����3-/!��!//!p)'6)�
%��		`	�
��p@@@@@@@@@@@@@@@@@@@@@@@���@��P@@����������	�
���!��!!!!%#735!!#7!35!��@������@ee��@����ee����@���������ee��������eee���������@�������6�:�A��#54&+"#!5+58138154&+3#!35#"3!!##7!35!��&�&�����@
@ ���� @

 ����ee����@@@&&@��@@��
@����@@
��
��[ee���������������@���!!�����@��@@��������@��
-��%!!!@������ ������@��@�����������@����'!!!##5#53533@��@��@�������������@���������������#�8��%'.>54.#"326776&'%".54>32#��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]5Y�2�GP�i<<i�PP�i<1+'�K�(F]55]F((F]55]F(����@�����
-�����3�8��3!265!#33#33#33#3#54&+"#"!54&#!#53�&@&�@�@@�@@�@@�@@����@�������&&�����@��@��@��@�PPPP??��������������	33!!!#53�������`� �� ����������������@@������������
-���!!!#53	##�� �� ����`���������@@������@�����������>�K��"32>7.##"&'.'>7>732>54&'1#"&54632�T��j$$j��TT��j$$j��T�.KK.8�CC�8.KK.(F]55]F(�8((88((8�/TvGGvT//TvGGvT/�M--M$&&$M--M,5]F((F]5,6(88((88(�����������"�1��	!5"3!26'1.#1#"&54632'"&=4632#�����
�K%3f3%�K
@%%%%@%%%%c��W]��,@@,g��%%%%�%�%%�%������������9�O��3#2#575!5!'"32>7>54.'.#512#".54>3����%�������*PKD--DKP**PKD--DKP*j��PP��jj��PP��j��@%��@�@��-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P�����������/�D��46;2+"&=!535#533"32>54.#".54>32#�  ���@@�@�j��PP��jj��PP��jV�qAAq�VV�qAAq�V�  �0@�@���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA��������(�5�B��.#"32>7>54.'>32!467#".5j$T\c33c\T$$8&&8$$T\c33c\T$$8&&8$&!��/q>O�i<��&!/q>O�i<*$8&&8$$T\c33c\T$$8&&8$$T\c33c\T$��>q/!&<i�O>q/��!&<i�O���� �@���	'	`� ���@� �������������3��.#"34>32!#".'7!732>5#z#U`j8j��P`Aq�V.WOE�`�&Aq�V.WOE����#U`j8j��P`&>+P��jV�qA$3 �`���V�qA$3 ����&>+P��j��� ������&�A�E��%##7#!"&'&47#"&5463!232#.#"326?37>'%7#@����`��	��

�	��

]�		�		7�7	��LL���������	N

	��

n�
-
-��		nn	��������������!"3!2654&#'7���5KK5�5KK5�@�Z�3Z�s�K5��5KK5�5K���Z�2Z�r������������7'!5##3!3535#!!@�@��@���������@��@@����@����������@��@��@������.����:�V�c���.'>'./.'.>767>&'81'.'&67>7>"&54632#&'81.'.7>76�AFDP�
��
�PDFADFA��AFD�Y44�



�44'8| 0'��T'0��|8''RK=7'��'7=KR'x$$6#$6 



��$$6$#6�����@�����K�U�c�t����������.'".'.'>706'4&/.+""3267>73267>7>'4&'>7>72.50631>7>71%#"&'>321.'.'.#!"3!2654&'1'#51#!"&54630:1;J
--#8

-/
-
 ,8M2;�:,d"
-��,"	#1
-
-O	*3Y'�0 
-Y-3')�!//!�!/�%
�)o	� 		���
�s
-
-
-I)�
-$lF ?3	9	RX
-
-�8	83f*#40�K#7 5
-�3-/!��!//!p)'6)�
%��		`	�
������@������*�4�K��3##33#%.'.'.#!"3!2654&'1'#51#!"&54630:1;�,3BkM:oqmLDe��-3')�!//!�!/�%
�)o	� 		���
���>��>��/���\�3-/!��!//!p)'6)�
%��		`	�
����@������)�3�J��#'#35#7377.'.'.#!"3!2654&'1'#51#!"&54630:1;�``����22o����-3')�!//!�!/�%
�)o	� 		���
�@�����\K��3-/!��!//!p)'6)�
%��		`	�
������:����9��%4'&#!"'&=4'&+"3!2765#!"'&5476;2!2��S��N((8�8)(()8�8((�8((��'����R8((((8J8((((8((8�������@�������������u@��@��5������������!��"32>54.###5#53533�j��PP��jj��PP��j��������P��jj��PP��jj��P���������������������"32>54.#!5!�j��PP��jj��PP��j�����P��jj��PP��jj��P������������$��!4&+"!"3!;265!26=4&#���
�
��

`
�
`

@`

��
�
��

`
�
��������T��%81	81>76&/.81	81.'&81	817>781	816?>'.'���7�	����	�7���	77	��77	���7�	����	�7���	���������ÞG_<��������j}f�����j}f����������������������������������������������(��������������������@��@��@��@��@��@�����@��������������@���������������������������� ��������.��@��@��@����������������������
-���h��J�D�F���.���"��L� l�6�
-
-�
-�@X���b������(���
�������������������������������������������\��������*��������j���������������
-�>������
-�4�~��	������	���\��	���*��	���j��	�����	���H��	�
-�4�~�i�m�c�e�-�i�c�o�n�s�V�e�r�s�i�o�n� �1�.�0�i�m�c�e�-�i�c�o�n�simce-icons�i�m�c�e�-�i�c�o�n�s�R�e�g�u�l�a�r�i�m�c�e�-�i�c�o�n�s�F�o�n�t� �g�e�n�e�r�a�t�e�d� �b�y� �I�c�o�M�o�o�n�.�������������������������������
\ No newline at end of file
diff --git a/web/modules/imce/css/images/browse.png b/web/modules/imce/css/images/browse.png
deleted file mode 100644
index fe203cf8c93aa7d05483464342badbb527e8e1ff..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/images/browse.png
+++ /dev/null
@@ -1,6 +0,0 @@
-�PNG
-
-���
IHDR�����������a���tEXtSoftware�Adobe ImageReadyq�e<���IDATxڔS_HSQ�]���#�F!��THVC��J�ִ���7_"�^z륇H$=�!DʽXX���w�h�ً��6ur3�\0��]���u&:��~���9�w>��9�'`���d����X�������%p�n��e�R/�i�E�?���TW�Ad�����gF��|��^���zȉ|&���*�D6�0��l�ù���2���z�ǻ����Ǔ���f1��q``@W&22�z2�HN䊄��)��t��hphh�������>Wʥ��``[{[k��9'���`�X`||�r9���EQ066uuu���)s�\_�~���Ks�Ѕ�`���aL��#�ٌD�~�<���Wq4y7��M$���iH@*�M�A�����������w󘀏a�-,,|��BP�T�0x<��@(4
-�􃇏38݉�uwt���jff�p��d��t��
-��� ojlr8�R���/)�;nh4�-�Ͱ��V��N'��b �$�~@ww7�&S��Y{YK����;��}/����a<�W#��T*���}����@���O
-l(�Wԗ��.�H$����|!�b�&�Dd�h��y��Ϸq��z0��<�8,��O��Z�~B�.�d2		y���j��uvb�sq����}J�e𿨮�V�D"�R���+��m����/*�����IEND�B`�
\ No newline at end of file
diff --git a/web/modules/imce/css/images/loading.gif b/web/modules/imce/css/images/loading.gif
deleted file mode 100644
index 16baa5bac9a27dc206ffde16cca51081ce80a932..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/images/loading.gif
+++ /dev/null
@@ -1,18 +0,0 @@
-GIF89a���������������������SSSMMM���444������:::������eee\\\kkkCCC������������!!!***{{{ppp%%%���VVV���������������������������������������������������������������������������������������������!�NETSCAPE2.0���!�-Made by Krasimira Nejcheva (www.loadinfo.net)�!�
-��,�������N�%��q@c��8�*ST.C���1�	"�a�H�,��Ij�T���`���
-i�)BA��J�GDrF?��>�!�
-��,�����
-��L�#�FUc�bA�I�ו-�j�x)��E�������SXB���,�J$�0\"Ca�z����U���N��uQ�!�
-��,������G`%��3�'� ���ɓX���D��D�HALH�a��G�O�: �Aa8 ��@>�E��@x��!�!�
-�
�,���
-���P�!Mi6�gYG1\�P�5T�r�
��Q,P`9�Z
#S<Eԓ��A,�
�����L��I��u��Zt:`��.���!�
-��,�����O@�p�x��$bD2
-I) �GB�D������
-��D��� �x|n|xCl \HA�!�
-��,���
-��L�#��3F�:�	+�.�!\������ahT�D���BqIj��Fc�RG�L���9J$�"6T*=R�!�
-��,������I�e�e�(�0H�� //���2T����H  ��A�&KI!9J"Ua)4�F��*
- B����B�!�
-�
�,���
-���S��0���Lf!8&:�@���D?���`l�BC�)���L@S86���q�9X�N���n\
-}�zBrG|}A�;
\ No newline at end of file
diff --git a/web/modules/imce/css/imce.admin.css b/web/modules/imce/css/imce.admin.css
deleted file mode 100644
index 3cac9217c393501dc50b8fe4d3cfac3918221077..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/imce.admin.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Profile list */
-.imce-profile-list {
-  margin-bottom: 2.5em;
-}
-
-/* Settings form */
-.imce-settings-form th > a {
-  display: inline;
-}
-.imce-settings-form th > a:after {
-  display: none;
-}
-
-/* Folder counter */
-.imce-profile-form {
-  counter-reset: folder;
-}
-.folder-container > .form-type-textfield:before {
-  counter-increment: folder;
-  content: counter(folder) ". ";
-}
-
-/* Number fields */
-.imce-profile-form .form-number {
-  width: 8em;
-}
-
-/* Indent permissions */
-.folder-container > .folder-permissions {
-  margin-left: 1.5em;
-}
-
-/* Align permission checkboxes */
-.folder-permissions .form-type-checkbox {
-  float: left;
-  min-width: 13em;
-}
-.folder-permissions .form-type-checkbox:first-child {
-  float: none;
-}
-
-/* Dimensions */
-.dimensions-wrapper > .form-item {
-  margin: 0;
-  display: inline-block;
-}
\ No newline at end of file
diff --git a/web/modules/imce/css/imce.css b/web/modules/imce/css/imce.css
deleted file mode 100644
index cd56a6576a13583d05c4889df5667772288aee7d..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/imce.css
+++ /dev/null
@@ -1,613 +0,0 @@
-.imce-page {
-  margin: 0;
-  padding: 0;
-  font: 12px/16px verdana;
-  color: #000;
-}
-.imce-page *,
-.imce-page *:before,
-.imce-page *:after {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.imce-page a {
-  color: #009;
-  border: 0;
-}
-.imce-page a:hover,
-.imce-page a:focus {
-  color: #00c;
-}
-
-#imce-fm {
-  position: relative;
-  border: 1px solid #ccc;
-  padding: 2px;
-  outline: 0;
-  background: #fff;
-}
-
-#imce-toolbar {
-  background: #ececec;
-  overflow: hidden;
-  border: 1px solid #ccc;
-  box-shadow: 1px 1px 0 #fff inset;
-  margin-bottom: 4px;
-}
-#imce-body {
-  height: 300px;
-  overflow: hidden;
-}
-#imce-body-resizer {
-  height: 5px;
-  cursor: n-resize;
-  overflow: hidden;
-  text-align: center;
-}
-#imce-body-resizer:before {
-  content: '\22ef';
-  display: inline-block;
-  vertical-align: text-top;
-  line-height: 0px;
-  font-size: 13px;
-}
-#imce-preview {
-  height: 90px;
-  overflow: auto;
-  border: 1px solid #ccc;
-}
-
-/* Inside imce-body */
-#imce-tree {
-  float: left;
-  width: 23%;
-  height: 100%;
-  overflow: auto;
-  outline: 0;
-  -webkit-overflow-scrolling: touch;/*Enable momentum scrolling on touch in webkit*/
-  border: 1px solid #ccc;
-}
-#imce-tree-resizer {
-  float: left;
-  width: 5px;
-  height: 100%;
-  cursor: e-resize;
-  position: relative;
-  overflow: hidden;
-}
-#imce-content {
-  height: 100%;
-  overflow: auto;
-  -webkit-overflow-scrolling: touch;
-  border: 1px solid #ccc;
-  position: relative;
-  outline: 0;
-}
-#imce-tree:focus,
-#imce-content:focus {
-  border-color: #aaa;
-}
-#imce-tree-resizer:before {
-  content: '\22ee';
-  position: absolute;
-  top: 50%;
-  left: 50%;
-  width: 16px;
-  line-height: 16px;
-  margin-top: -8px;
-  margin-left: -8px;
-  text-align: center;
-  font-size: 13px;
-}
-
-/* Item preview */
-.imce-item-preview {
-  text-align: center;
-}
-.imce-preview-info > * {
-  display: inline-block;
-  word-wrap: break-word;
-  padding: 2px 8px;
-  margin: -1px 1px 3px;
-  border: 1px solid #ccc;
-  background: #f5f5f5;
-  background: linear-gradient(180deg, #f9f9f9, #eee);
-}
-.imce-preview-image > img {
-  cursor: pointer;
-}
-
-/* Form elements */
-.imce-form-item {
-  margin: 0 0 0.7em 0;
-}
-.imce-layer button::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-.imce-layer input,
-.imce-layer textarea,
-.imce-layer select,
-.imce-layer button {
-  border: 1px solid #bbb;
-  color: #333;
-  background-color: #fff;
-  padding: 3px 2px;
-  font: inherit;
-  margin: 0;
-}
-.imce-layer textarea {
-  padding: 0;
-}
-.imce-layer input[type="number"] {
-  width: 7em;
-}
-.imce-layer input[type="checkbox"],
-.imce-layer input[type="radio"] {
-  border: none;
-  background: none;
-  margin: 5px 5px 5px 0;
-  vertical-align: middle;
-}
-.imce-layer input[type="submit"],
-.imce-layer input[type="button"],
-.imce-layer button {
-  background-color: #ddd;
-  border: 1px solid #999;
-  padding: 3px 10px;
-}
-.imce-layer input[type="submit"]:hover,
-.imce-layer input[type="button"]:hover,
-.imce-layer button:hover {
-  background-color: #e5e5e5;
-}
-.imce-layer input[type="submit"]:active,
-.imce-layer input[type="button"]:active,
-.imce-layer button:active {
-  background-color: #eee;
-}
-.imce-layer input[disabled],
-.imce-layer input[disabled]:hover,
-.imce-layer input[disabled]:active,
-.imce-layer button[disabled],
-.imce-layer button[disabled]:hover,
-.imce-layer button[disabled]:active {
-  background-color: #ededed;
-  color: #666;
-  text-shadow: 1px 1px 0 #fff;
-}
-.imce-layer label {
-  display: block;
-  cursor: default;
-  font-weight: normal;
-}
-
-
-/* Branch */
-.imce-branch {
-  margin: 2px;
-  white-space: nowrap;
-}
-/* Branch toggle */
-.imce-branch-toggle {
-  display: inline-block;
-  vertical-align: bottom;
-  width: 16px;
-  height: 16px;
-  text-align: center;
-  cursor: default;
-}
-.busy > .imce-branch-toggle {
-  background: url(images/loading.gif) no-repeat 50% 50%;
-}
-.imce-branch-toggle:before {
-  content: '+';
-  display: inline-block;
-  vertical-align: bottom;
-  text-align: center;
-  font: bold 9px/8px courier new;
-  width: 9px;
-  height: 9px;
-  border: 1px solid #777;
-  border-radius: 1px;
-  margin-bottom: 3px;
-}
-.expanded > .imce-branch-toggle:before {
-  content: '-';
-}
-.leaf > .imce-branch-toggle:before,
-.busy > .imce-branch-toggle::before {
-  content: none;
-}
-/* Branch name */
-.imce-branch-name {
-  display: inline-block;
-  vertical-align: bottom;
-  margin: 0 1px;
-  padding: 1px 3px 1px 1px;
-  cursor: pointer;
-  border-radius: 1px;
-}
-.imce-branch-name:hover {
-  background-color: #dbe9fc;
-}
-.active > .imce-branch-name {
-  background-color: #b7d3f8;
-}
-.disabled > .imce-branch-name {
-  cursor: default;
-  color: #999;
-}
-/* Branch icon */
-.imce-branch-name:before {
-  content: "\e609";
-  color: #666;
-  margin: 0 3px 0 0;
-}
-.active > .imce-branch-name:before {
-  content: "\e60a";
-  color: #222;
-}
-
-/* Subtree */
-.imce-subtree {
-  margin: 0 0 0 15px;
-}
-
-/* Content item */
-.imce-item {
-  border-bottom: 1px solid #d5dcea;
-  cursor: default;
-  padding: 0 8px 0 4px;
-  overflow: hidden;
-}
-.imce-item:hover {
-  background-color: #e4e9f2;
-}
-.imce-item.selected {
-  background-color: #6bb6ff;
-  background-image: linear-gradient(180deg, #65B5FF, #6FBAFF);
-}
-.imce-item.disabled {
-  opacity: 0.6;
-}
-/* Item children */
-.imce-item > * {
-  white-space: nowrap;
-  overflow: hidden;
-  padding: 4px 2px;
-  height: 24px;
-  float: right;
-  text-align: right;
-}
-/* Item icon */
-.imce-item-icon {
-  float: left;
-}
-/* Item name */
-.imce-item-name {
-  float: none;
-  text-align: left;
-}
-/* Item size */
-.imce-item-size {
-  width: 14%;
-  max-width: 6.4em;
-}
-/* Item width */
-.imce-item-width {
-  width: 10%;
-  max-width: 4.4em;
-}
-/* Item height */
-.imce-item-height {
-  width: 10%;
-  max-width: 4.4em;
-  text-align: left;
-}
-/* Item date */
-.imce-item-date {
-  width: 18%;
-  max-width: 6.8em;
-}
-
-/* Specific item icons */
-.imce-item-icon:before {
-  content: "\e601";
-}
-.folder > .imce-item-icon:before {
-  content: "\e609";
-  color: #666;
-}
-.file-zip > .imce-item-icon:before,
-.file-rar > .imce-item-icon:before,
-.file-gz > .imce-item-icon:before {
-  content: "\e606";
-}
-.file-doc > .imce-item-icon:before,
-.file-docx > .imce-item-icon:before {
-  content: "\e61c";
-}
-.file-xls > .imce-item-icon:before,
-.file-xlsx > .imce-item-icon:before {
-  content: "\e61d";
-}
-.file-pdf > .imce-item-icon:before {
-  content: "\e61b";
-}
-.file-swf > .imce-item-icon:before,
-.file-fla > .imce-item-icon:before,
-.file-avi > .imce-item-icon:before,
-.file-mpg > .imce-item-icon:before,
-.file-mov > .imce-item-icon:before,
-.file-flv > .imce-item-icon:before,
-.file-wmv > .imce-item-icon:before,
-.file-mp4 > .imce-item-icon:before {
-  content: "\e605";
-}
-.file-txt > .imce-item-icon:before,
-.file-ini > .imce-item-icon:before {
-  content: "\e602";
-}
-.file-mp3 > .imce-item-icon:before,
-.file-wav > .imce-item-icon:before,
-.file-wma > .imce-item-icon:before {
-  content: "\e604";
-}
-.file-jpg > .imce-item-icon:before,
-.file-jpeg > .imce-item-icon:before,
-.file-bmp > .imce-item-icon:before,
-.file-tif > .imce-item-icon:before,
-.file-tiff > .imce-item-icon:before,
-.file-png > .imce-item-icon:before,
-.file-gif > .imce-item-icon:before {
-  content: "\e603";
-}
-
-/* Content header */
-.imce-content-header {
-  position: relative;
-  left: 0;
-  top: 0;
-}
-.imce-content-header .imce-item {
-  background: #f1f1f1;
-  box-shadow: 1px 1px 0 #fff inset;
-  border-bottom-color: #ccc;
-}
-.imce-content-header .sorted {
-  color: #00c;
-}
-.imce-content-header .asc:after {
-  content: '\2191';
-}
-.imce-content-header .desc:after {
-  content: '\2193';
-}
-.imce-content-header .imce-item-icon {
-  width: 20px;
-  text-align: center;
-}
-.imce-content-header .imce-item-icon:before {
-  content: "";
-}
-
-/* Content status */
-.imce-content-status {
-  position: absolute;
-  left: 0;
-  bottom: 0;
-}
-.imce-content-status > * {
-  display: inline-block;
-  background: #f5f5f5;
-  border: 1px solid #ccc;
-  border-width: 1px 1px 0 0;
-  padding: 2px 8px;
-  font-size: 0.9em;
-}
-
-/* Folder content */
-.imce-folder-content {
-  padding-bottom: 20px;
-}
-
-/* Layer */
-.imce-layer {
-  position: absolute;
-  display: none;
-  z-index: 10;
-  background: #fff;
-}
-
-/* Message */
-.imce-message-popup {
-  left: 20%;
-  top: 25%;
-  width: 60%;
-  max-width: 500px;
-  max-height: 50%;
-  overflow: auto;
-  z-index: 20;
-  box-shadow: 0 1px 5px #999;
-  border: 2px solid #555;
-  border-radius: 3px;
-}
-.imce-message {
-  position: relative;
-  font-size: 1.2em;
-  padding: 4px 8px 4px 24px;
-  margin: 4px;
-  word-wrap: break-word;
-}
-.imce-message:before {
-  content: '\e613';
-  position: absolute;
-  top: 0;
-  left: 0;
-  margin: 4px;
-  color: #00ce35;
-}
-.imce-message.warning:before {
-  content: '\e611';
-  color: #fe8f00;
-}
-.imce-message.error:before {
-  content: '\e621';
-  color: #f03;
-}
-.imce-ajax-error {
-  white-space: pre-wrap;
-  margin: 0;
-}
-
-/* Toolbar button popup */
-.imce-tbb-popup {
-  padding: 10px;
-  border: 2px solid #555;
-  border-radius: 3px;
-  box-shadow: 0 1px 5px #999;
-}
-
-/* Toolbar button */
-.imce-tbb {
-  cursor: default;
-  padding: 6px 7px;
-  float: left;
-  display: inline-block;
-}
-.imce-tbb:hover {
-  background-color: #fafafa;
-}
-.imce-tbb:active,
-.imce-tbb.active {
-  background-color: #fff;
-}
-.imce-tbb.disabled {
-  opacity: 0.5;
-}
-.imce-tbb-title {
-  display: inline-block;
-  vertical-align: bottom;
-  margin-left: 3px;
-  text-shadow: 0 1px 0 #f5f5f5;
-}
-
-/*Newdir*/
-.imce-newfolder-form button {
-  margin-left: -1px;
-}
-
-/* Upload */
-.imce-upload-form .imce-form-actions {
-  margin-top: 0.5em;
-}
-.imce-upload-form.uq .imce-form-file,
-.imce-upload-form.auto-start .imce-form-actions {
-  display: none;
-}
-/* Upload queue */
-.imce-uq-button {
-  display: block;
-  position: relative;
-  overflow: hidden;
-  cursor: default;
-  padding: 6px 16px;
-  background-color: #d1f8cd;
-  border: 1px solid #a6dca1;
-  text-align: center;
-}
-.imce-uq-button:before {
-  margin-right: 5px;
-}
-.imce-uq-button:hover {
-  background-color: #def9db;
-}
-.imce-uq-button:active {
-  background-color: #e7fbe4;
-}
-.imce-uq-button input {
-  position: absolute;
-  opacity: 0;
-  top: 0;
-  left: -5px;
-  width: 110%;
-  height: 100%;
-  padding: 0;
-  margin: 0;
-  border: 0;
-  font: 50em monospace;
-}
-/* Upload queue items */
-.imce-uq-items {
-  width: 20em;
-  max-height: 20em;
-  overflow: auto;
-  overflow-x: hidden;
-  margin: 7px 0 0;
-}
-.imce-uq-items:empty {
-  margin: 0;
-}
-.imce-uqi {
-  position: relative;
-  background: #eaeaea;
-  background: linear-gradient(180deg, #eee, #e5e5e5);
-  font-size: 0.9em;
-  padding: 7px;
-  margin-bottom: 7px;
-  border: 1px solid #ccc;
-  box-shadow: 1px 1px 0 #fff inset;
-}
-.imce-uqi-cancel {
-  position: absolute;
-  right: 5px;
-  top: 5px;
-  line-height: 8px;
-  color: #890017;
-  cursor: pointer;
-}
-.imce-uqi-cancel:hover {
-  color: #f00;
-}
-.imce-uqi-cancel:before {
-  content: 'X';
-}
-.imce-uqi-info {
-  width: 84%;
-}
-.imce-uqi-info span {
-  display: inline-block;
-  vertical-align: bottom;
-  white-space: nowrap;
-}
-.imce-uqi-name {
-  width: 72%;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-.imce-uqi-size {
-  width: 28%;
-  text-align: right;
-}
-.imce-uqi-progress {
-  width: 84%;
-  float: left;
-  clear: left;
-  background: #ddd;
-  border: 1px solid #fff;
-  box-shadow: 1px 1px 1px #666 inset;
-  margin-top: 2px;
-}
-.imce-uqi-bar {
-  width: 1px;
-  height: 10px;
-  background: #007cee;
-  background: linear-gradient(90deg, #0084ff, #006dd2);
-  box-shadow: 1px 1px 1px #666 inset;
-}
-.imce-uqi-percent {
-  text-align: right;
-}
diff --git a/web/modules/imce/css/imce.filefield.css b/web/modules/imce/css/imce.filefield.css
deleted file mode 100644
index 1478bc025e4a6d491a1a0df2267066c0363fb755..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/imce.filefield.css
+++ /dev/null
@@ -1,9 +0,0 @@
-.imce-filefield-link:before {
-  content: '';
-  display: inline-block;
-  vertical-align: middle;
-  width: 16px;
-  height: 16px;
-  margin-right: 2px;
-  background: url(images/browse.png) no-repeat 50% 50%;
-}
\ No newline at end of file
diff --git a/web/modules/imce/css/imce.icons.css b/web/modules/imce/css/imce.icons.css
deleted file mode 100644
index cc65f4bd5192e0d38ccfdcc95ff0b008b725eb46..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/imce.icons.css
+++ /dev/null
@@ -1,137 +0,0 @@
-@font-face {
-	font-family: 'imce-icons';
-	src:url('fonts/imce-icons.eot?-7jpipx');
-	src:url('fonts/imce-icons.eot?#iefix-7jpipx') format('embedded-opentype'),
-		url('fonts/imce-icons.woff?-7jpipx') format('woff'),
-		url('fonts/imce-icons.ttf?-7jpipx') format('truetype'),
-		url('fonts/imce-icons.svg?-7jpipx#imce-icons') format('svg');
-	font-weight: normal;
-	font-style: normal;
-}
-.imce-ficon:before {
-	font-family: 'imce-icons';
-	speak: none;
-  font-size: 16px;
-	font-style: normal;
-	font-weight: normal;
-	font-variant: normal;
-	text-transform: none;
-	line-height: 1;
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
-  display: inline-block;
-  vertical-align: bottom;
-}
-.imce-ficon.busy:before {
-  content: '';
-  padding: 8px;
-  background: url(images/loading.gif) no-repeat 50% 50%;
-}
-.imce-ficon-image:before {
-	content: "\e600";
-}
-.imce-ficon-file:before {
-	content: "\e601";
-}
-.imce-ficon-file-text:before {
-	content: "\e602";
-}
-.imce-ficon-file-image:before {
-	content: "\e603";
-}
-.imce-ficon-file-audio:before {
-	content: "\e604";
-}
-.imce-ficon-file-video:before {
-	content: "\e605";
-}
-.imce-ficon-file-zip:before {
-	content: "\e606";
-}
-.imce-ficon-copy:before {
-	content: "\e607";
-}
-.imce-ficon-paste:before {
-	content: "\e608";
-}
-.imce-ficon-folder:before {
-	content: "\e609";
-}
-.imce-ficon-folder-open:before {
-	content: "\e60a";
-}
-.imce-ficon-folder-add:before {
-	content: "\e60b";
-}
-.imce-ficon-search:before {
-	content: "\e60c";
-}
-.imce-ficon-delete:before {
-	content: "\e60d";
-}
-.imce-ficon-download:before {
-	content: "\e60e";
-}
-.imce-ficon-upload:before {
-	content: "\e60f";
-}
-.imce-ficon-preview:before {
-	content: "\e610";
-}
-.imce-ficon-warning:before {
-	content: "\e611";
-}
-.imce-ficon-help:before {
-	content: "\e612";
-}
-.imce-ficon-add:before {
-	content: "\e622";
-}
-.imce-ficon-info:before {
-	content: "\e613";
-}
-.imce-ficon-cancel:before {
-	content: "\e614";
-}
-.imce-ficon-remove:before {
-	content: "\e623";
-}
-.imce-ficon-check:before {
-	content: "\e615";
-}
-.imce-ficon-refresh:before {
-	content: "\e616";
-}
-.imce-ficon-sort:before {
-	content: "\e617";
-}
-.imce-ficon-checked:before {
-	content: "\e618";
-}
-.imce-ficon-crop:before {
-	content: "\e619";
-}
-.imce-ficon-cut:before {
-	content: "\e61a";
-}
-.imce-ficon-file-pdf:before {
-	content: "\e61b";
-}
-.imce-ficon-file-word:before {
-	content: "\e61c";
-}
-.imce-ficon-file-excel:before {
-	content: "\e61d";
-}
-.imce-ficon-folder-white:before {
-	content: "\e61e";
-}
-.imce-ficon-plus:before {
-	content: "\e620";
-}
-.imce-ficon-minus:before {
-	content: "\e621";
-}
-.imce-ficon-click:before {
-	content: "\e61f";
-}
\ No newline at end of file
diff --git a/web/modules/imce/css/imce.input.css b/web/modules/imce/css/imce.input.css
deleted file mode 100644
index 0514bb4a89d5206aab0a25f7662d03709c992b41..0000000000000000000000000000000000000000
--- a/web/modules/imce/css/imce.input.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.imce-url-button {
-  display: inline-block;
-  margin: 1px 0;
-}
-.imce-url-button:before {
-  content: '';
-  float: left;
-  width: 16px;
-  height: 16px;
-  margin-right: 2px;
-  background: url(images/browse.png) no-repeat 50% 50%;
-}
\ No newline at end of file
diff --git a/web/modules/imce/imce.info.yml b/web/modules/imce/imce.info.yml
deleted file mode 100644
index e75dbe150cbd57b269bfa516070c47521a74cf1b..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.info.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: Imce File Manager
-type: module
-description: Provides a file manager supporting personal folders.
-package: Media
-# core: 8.x
-configure: imce.admin
-# Information added by Drupal.org packaging script on 2017-07-12
-version: '8.x-1.6'
-core: '8.x'
-project: 'imce'
-datestamp: 1499898845
diff --git a/web/modules/imce/imce.install b/web/modules/imce/imce.install
deleted file mode 100644
index c53a56c32fe55d1c4378c9a670bc0df1faafc0a2..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.install
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/**
- * @file
- * Manages installation and update of imce module.
- */
-
-use Drupal\Core\StreamWrapper\StreamWrapperInterface;
-
-/**
- * Implements hook_install().
- */
-function imce_install() {
-  // Assign admin profile to administrators.
-  $admin_roles = \Drupal::entityQuery('user_role')->condition('is_admin', TRUE)->execute();
-  if ($admin_roles) {
-    $config = \Drupal::configFactory()->getEditable('imce.settings');
-    $roles_profiles = $config->get('roles_profiles') ?: [];
-    $wrappers = \Drupal::service('stream_wrapper_manager')->getWrappers(StreamWrapperInterface::WRITE_VISIBLE);
-    foreach ($wrappers as $scheme => $info) {
-      foreach ($admin_roles as $role) {
-        $roles_profiles[$role][$scheme] = 'admin';
-      }
-    }
-    $config->set('roles_profiles', $roles_profiles);
-    $config->save(TRUE);
-  }
-}
\ No newline at end of file
diff --git a/web/modules/imce/imce.libraries.yml b/web/modules/imce/imce.libraries.yml
deleted file mode 100644
index 8fd47fc01d9fab45dd2390ebba8b890588a2cced..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.libraries.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-drupal.imce:
-  version: VERSION
-  js:
-    js/imce.js: {}
-    js/imce.Item.js: {}
-    js/imce.File.js: {}
-    js/imce.Folder.js: {}
-    js/imce.Tbb.js: {}
-  css:
-    component:
-      css/imce.css: {}
-      css/imce.icons.css: {}
-  dependencies:
-    - core/jquery
-    - core/drupal
-    - core/drupalSettings
-
-drupal.imce.newfolder:
-  version: VERSION
-  js:
-    js/plugins/imce/imce.newfolder.js: {}
-  dependencies:
-    - imce/drupal.imce
-
-drupal.imce.upload:
-  version: VERSION
-  js:
-    js/plugins/imce/imce.upload.js: {}
-    js/plugins/imce/imce.UploadQueue.js: {}
-  dependencies:
-    - imce/drupal.imce
-
-drupal.imce.delete:
-  version: VERSION
-  js:
-    js/plugins/imce/imce.delete.js: {}
-  dependencies:
-    - imce/drupal.imce
-
-drupal.imce.resize:
-  version: VERSION
-  js:
-    js/plugins/imce/imce.resize.js: {}
-  dependencies:
-    - imce/drupal.imce
-
-drupal.imce.admin:
-  version: VERSION
-  css:
-    component:
-      css/imce.admin.css: {}
-
-drupal.imce.bueditor:
-  version: VERSION
-  js:
-    js/plugins/bueditor/imce.bueditor.js: {}
-  dependencies:
-    - bueditor/drupal.bueditor
-
-drupal.imce.ckeditor:
-  version: VERSION
-  js:
-    js/plugins/ckeditor/imce.ckeditor.js: {}
-  dependencies:
-    - ckeditor/drupal.ckeditor
-
-drupal.imce.filefield:
-  version: VERSION
-  js:
-    js/imce.filefield.js: {}
-  css:
-    component:
-      css/imce.filefield.css: {}
-  dependencies:
-    - core/jquery
-    - core/drupal
-    - core/drupalSettings
-
-drupal.imce.input:
-  version: VERSION
-  css:
-    component:
-      css/imce.input.css: {}
-  js:
-    js/imce.input.js: {}
-  dependencies:
-    - core/jquery
-    - core/drupal
-    - core/drupalSettings
diff --git a/web/modules/imce/imce.links.action.yml b/web/modules/imce/imce.links.action.yml
deleted file mode 100644
index c1ed61aa742caac9517924c87eee63a3c8b432d4..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.links.action.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-imce.profile_add:
-  route_name: imce.profile_add
-  title: 'Add configuration profile'
-  appears_on:
-    - imce.admin
diff --git a/web/modules/imce/imce.links.menu.yml b/web/modules/imce/imce.links.menu.yml
deleted file mode 100644
index 5831dc37f87f2cc9fb736cf2d60e9faef111eee6..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.links.menu.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-imce.admin:
-  title: 'Imce File Manager'
-  description: 'Configure Imce File Manager.'
-  route_name: imce.admin
-  parent: system.admin_config_media
diff --git a/web/modules/imce/imce.module b/web/modules/imce/imce.module
deleted file mode 100644
index 573148cf9d438c4a00fba5235ee4a425c6b7cebf..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.module
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines Drupal hooks for imce module.
- */
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Field\WidgetInterface;
-use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\imce\ImceFileField;
-use Drupal\imce\Imce;
-
-/**
- * Implements hook_theme().
- */
-function imce_theme() {
-  return [
-    'imce_page' => [
-      'render element' => 'page',
-      'function' => 'imce_page_render',
-    ],
-  ];
-}
-
-/**
- * Renders imce page.
- */
-function imce_page_render($variables) {
-  return \Drupal::service('renderer')->render($variables['page']);
-}
-
-/**
- * Implements hook_file_download().
- */
-function imce_file_download($uri) {
-  if (Imce::accessFileUri($uri, \Drupal::currentUser())) {
-    return [
-      'Content-type' => \Drupal::service('file.mime_type.guesser')->guess($uri),
-      'Content-Length' => filesize($uri),
-    ];
-  }
-}
-
-/**
- * Implements hook_field_widget_third_party_settings_form().
- * Returns imce settings form for supported file widgets.
- */
-function imce_field_widget_third_party_settings_form(WidgetInterface $widget, FieldDefinitionInterface $field_definition, $form_mode, $form, FormStateInterface $form_state) {
-  return ImceFileField::widgetSettingsForm($widget, $field_definition, $form_mode, $form, $form_state);
-}
-
-/**
- * Implements hook_field_widget_settings_summary_alter().
- * Sets imce settings summary for supported file widgets.
- */
-function imce_field_widget_settings_summary_alter(&$summary, $context) {
-  return ImceFileField::alterWidgetSettingsSummary($summary, $context);
-}
-
-/**
- * Implements hook_field_widget_form_alter().
- * Alters widget forms that have imce enabled.
- */
-function imce_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
-  if ($context['widget']->getThirdPartySetting('imce', 'enabled')) {
-    $scheme = $context['items'][$context['delta']]->getFieldDefinition()->getSetting('uri_scheme');
-    if (Imce::access(\Drupal::currentUser(), $scheme)) {
-      $element['#scheme'] = $scheme;
-      $class = 'Drupal\imce\ImceFileField';
-      $element['#process'][] = [$class, 'processWidget'];
-      // Make sure default value callbacks are added
-      if (empty($element['#file_value_callbacks'])) {
-        $info = \Drupal::service('element_info')->getInfo($element['#type']);
-        if (!empty($info['#file_value_callbacks'])) {
-          $element['#file_value_callbacks'] = $info['#file_value_callbacks'];
-        }
-      }
-      $element['#file_value_callbacks'][] = [$class, 'setWidgetValue'];
-    }
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for editor_link_dialog form.
- */
-function imce_form_editor_link_dialog_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
-  imce_process_url_element($form['attributes']['href'], 'link');
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for editor_image_dialog form.
- */
-function imce_form_editor_image_dialog_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
-  imce_process_url_element($form['attributes']['src'], 'image');
-}
-
-/**
- * Integrates Imce into an URL element.
- */
-function imce_process_url_element(&$element, $type = 'link') {
-  if ($element && Imce::access()) {
-    $element['#attributes']['class'][] = 'imce-url-input';
-    $element['#attributes']['data-imce-type'] = $type;
-    $element['#attached']['library'][] = 'imce/drupal.imce.input';
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for filter_format_form.
- */
-function imce_form_filter_format_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
-  if (isset($form['editor']['settings']['subform']['plugins']['drupalimage']['image_upload']['status'])) {
-    $desc = &$form['editor']['settings']['subform']['plugins']['drupalimage']['image_upload']['status']['#description'];
-    $str = t('Disable to use IMCE file browser.');
-    $desc = $desc ? $desc . ' ' . $str : $str;
-  }
-}
\ No newline at end of file
diff --git a/web/modules/imce/imce.permissions.yml b/web/modules/imce/imce.permissions.yml
deleted file mode 100644
index f530e43042c850c11b2f8f2db0126428abd9b613..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.permissions.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-administer imce:
-  title: 'Administer Imce File Manager'
-  restrict access: true
diff --git a/web/modules/imce/imce.routing.yml b/web/modules/imce/imce.routing.yml
deleted file mode 100644
index e6be4f7130a387bbf469db0658bad11a1cd64524..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.routing.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-imce.page:
-  path: '/imce/{scheme}'
-  defaults:
-    _controller: '\Drupal\imce\Controller\ImceController::page'
-    _title: 'File Manager'
-    scheme: null
-  requirements:
-    _custom_access: '\Drupal\imce\Controller\ImceController::checkAccess'
-
-imce.admin:
-  path: '/admin/config/media/imce'
-  defaults:
-    _controller: '\Drupal\imce\Controller\ImceController::adminOverview'
-    _title: 'Imce File Manager'
-  requirements:
-    _permission: 'administer imce'
-
-imce.profile_add:
-  path: '/admin/config/media/imce/add-profile'
-  defaults:
-    _entity_form: 'imce_profile.add'
-    _title: 'Add configuration profile'
-  requirements:
-    _entity_create_access: 'imce_profile'
-
-entity.imce_profile.edit_form:
-  path: '/admin/config/media/imce/{imce_profile}'
-  defaults:
-    _entity_form: 'imce_profile.edit'
-    _title: 'Edit configuration profile'
-  requirements:
-    _entity_access: 'imce_profile.update'
-
-entity.imce_profile.delete_form:
-  path: '/admin/config/media/imce/{imce_profile}/delete'
-  defaults:
-    _entity_form: 'imce_profile.delete'
-    _title: 'Delete configuration profile'
-  requirements:
-    _entity_access: 'imce_profile.delete'
-
-entity.imce_profile.duplicate_form:
-  path: '/admin/config/media/imce/{imce_profile}/duplicate'
-  defaults:
-    _entity_form: 'imce_profile.duplicate'
-    _title: 'Duplicate configuration profile'
-  requirements:
-    _entity_create_access: 'imce_profile'
diff --git a/web/modules/imce/imce.services.yml b/web/modules/imce/imce.services.yml
deleted file mode 100644
index eb8718202f68306833d1a8a20f0e5966f61641fc..0000000000000000000000000000000000000000
--- a/web/modules/imce/imce.services.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-services:
-  plugin.manager.imce.plugin:
-    class: Drupal\imce\ImcePluginManager
-    parent: default_plugin_manager
-  imce.route_subscriber:
-    class: Drupal\imce\Routing\ImceRouteSubscriber
-    tags:
-      - { name: event_subscriber }
diff --git a/web/modules/imce/js/imce.File.js b/web/modules/imce/js/imce.File.js
deleted file mode 100644
index b043d308b209e663bc806193107fc4c4eacb56a2..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/imce.File.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines imce File object.
-   */
-
-  /**
-   * File.
-   */
-  imce.File = function (name) {
-    this.construct(name);
-  };
-
-  /**
-   * Item prototype
-   */
-  var ItemProto = imce.Item.prototype;
-
-  /**
-   * File prototype extends Item prototype.
-   */
-  var File = $.extend(imce.File.prototype, ItemProto);
-
-  /**
-   * Initialize the file object.
-   */
-  File.construct = function (name) {
-    this.isFile = true;
-    this.type = 'file';
-    ItemProto.construct.apply(this, arguments);
-  };
-
-  /**
-   * Initialize DOM elements.
-   */
-  File.createEl = function () {
-    if (!this.el) {
-      ItemProto.createEl.apply(this, arguments);
-      this.el.className += ' file';
-    }
-  };
-
-  /**
-   * Name change handler.
-   */
-  File.onNameChange = function (oldval) {
-    ItemProto.onNameChange.apply(this, arguments);
-    // Get the new extension
-    var File = this;
-    var newext = imce.getExt(File.name);
-    // Check if the extension has changed
-    if (File.ext !== newext) {
-      // Remove the classname of old ext
-      if (File.ext != null) {
-        if (File.ext) {
-          $(File.el).removeClass('file-' + File.ext.toLowerCase());
-        }
-      }
-      // Add the classname for new ext
-      if (newext) {
-        File.el.className += ' file-' + newext.toLowerCase();
-      }
-      File.ext = newext;
-    }
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/imce.Folder.js b/web/modules/imce/js/imce.Folder.js
deleted file mode 100644
index 98f3007bd07cf3dca1758d8f82fb6a1ec7d519f8..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/imce.Folder.js
+++ /dev/null
@@ -1,791 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines imce Folder object.
-   */
-
-  /**
-   * Folder.
-   */
-  imce.Folder = function (name, conf) {
-    this.construct(name, conf);
-  };
-
-  /**
-   * Item prototype
-   */
-  var ItemProto = imce.Item.prototype;
-
-  /**
-   * Folder prototype extends Item prototype.
-   */
-  var Folder = $.extend(imce.Folder.prototype, ItemProto);
-
-  /**
-   * Constructs the Folder.
-   */
-  Folder.construct = function (name, conf) {
-    var Folder = this;
-    Folder.isFolder = true;
-    Folder.type = 'folder';
-    Folder.items = [];
-    Folder.files = {};
-    Folder.subfolders = {};
-    ItemProto.construct.apply(Folder, arguments);
-    Folder.setConf(conf);
-  };
-
-  /**
-   * Creates folder elements.
-   */
-  Folder.createEl = function () {
-    var nameEl;
-    var toggleEl;
-    var branchEl;
-    var Folder = this;
-    if (!Folder.el) {
-      // Item elements.
-      ItemProto.createEl.apply(Folder, arguments);
-      Folder.el.className += ' folder';
-      // Folder elements
-      Folder.contentEl = imce.createEl('<div class="imce-folder-content clearfix"></div>');
-      Folder.subtreeEl = imce.createEl('<div class="imce-subtree"></div>');
-      branchEl = Folder.branchEl = imce.createEl('<div class="imce-branch"><span class="imce-branch-toggle"></span><span class="imce-branch-name imce-ficon"></span></div>');
-      toggleEl = Folder.branchToggleEl = branchEl.firstChild;
-      toggleEl.onclick = imce.eBranchToggleClick;
-      nameEl = Folder.branchNameEl = branchEl.children[1];
-      nameEl.onclick = imce.eBranchNameClick;
-      branchEl.Folder = nameEl.Folder = toggleEl.Folder = Folder;
-    }
-  };
-
-  /**
-   * Sets the folder content.
-   */
-  Folder.setContent = function (content) {
-    var i;
-    var Item;
-    var list;
-    var Folder = this;
-    var items = Folder.getItems();
-    // Remove the items that no longer exist.
-    for (i in items) {
-      if (!imce.owns(items, i)) {
-        continue;
-      }
-      Item = items[i];
-      list = Item.isFolder ? content.subfolders : content.files;
-      // Existing item is not in the list
-      if (!list || !imce.owns(list, Item.name)) {
-        // Make sure it's not (parent of) a predefined folder
-        if (!Item.isFolder || !Item.hasPredefinedPath()) {
-          Folder.removeItem(Item);
-        }
-      }
-    }
-    Folder.extend(content.props);
-    Folder.addContent(content);
-    Folder.content = content;
-    Folder.updateSubtree();
-  };
-
-  /**
-   * Adds new files and subfolders.
-   */
-  Folder.addContent = function (content, selectNew) {
-    var Folder = this;
-    var files = content.files;
-    var subfolders = content.subfolders;
-    if (!files && !subfolders) {
-      return;
-    }
-    // Add items
-    Folder.addItems(files, 'file');
-    Folder.addItems(subfolders, 'folder');
-    // Update sort
-    if (Folder.active) {
-      Folder.sortItems();
-    }
-    else {
-      Folder.needSort = 1;
-    }
-    Folder.sortTree();
-    // Select new items.
-    if (selectNew && Folder.active) {
-      var name;
-      var fname;
-      var sname;
-      imce.deselectAll();
-      if (files) {
-        for (fname in files) {
-          if (!imce.owns(files, fname)) {
-            continue;
-          }
-          Folder.getItem(fname).select();
-        }
-      }
-      if (subfolders) {
-        for (sname in subfolders) {
-          if (!imce.owns(subfolders, sname)) {
-            continue;
-          }
-          Folder.getItem(sname).select();
-        }
-      }
-      // Scroll the last item into view
-      if (name = (fname || sname)) {
-        Folder.getItem(name).scrollIntoView();
-      }
-    }
-  };
-
-  /**
-   * Add a list of items of a specific type.
-   */
-  Folder.addItems = function (items, type) {
-    var Item;
-    var name;
-    var Type = type === 'folder' ? imce.Folder : imce.File;
-    if (items) {
-      for (name in items) {
-        // Update
-        if (Item = this.getItem(name)) {
-          Item.extend(items[name]);
-          this.updateStatus();
-        }
-        // Insert
-        else {
-          Item = new Type(name);
-          Item.extend(items[name]);
-          this.appendItem(Item);
-        }
-      }
-    }
-  };
-
-  /**
-   * Returns a copy of items array.
-   */
-  Folder.getItems = function () {
-    return this.items.slice(0);
-  };
-
-  /**
-   * Append an item to the folder.
-   */
-  Folder.appendItem = function (Item) {
-    var Folder = this;
-    var name = Item.name;
-    var existing;
-    if (!Folder.validateAppend(Item)) {
-      return;
-    }
-    // Remove the item from old parent
-    Item.remove(true);
-    // Remove existing item with the same name
-    if (existing = Folder.getItem(name)) {
-      existing.remove();
-    }
-    // Append item.
-    Folder.items.push(Item);
-    Item.parent = Folder;
-    Folder.contentEl.appendChild(Item.el);
-    // Append subfolder
-    if (Item.isFolder) {
-      Folder.prepareSubtree();
-      Folder.subtreeEl.appendChild(Item.branchEl);
-      Folder.subfolders[name] = Item;
-      Item.setPath((Folder.parent ? Folder.path + '/' : '') + Item.name);
-    }
-    // Append file
-    else {
-      Folder.files[name] = Item;
-    }
-    // Update status.
-    Folder.updateStatus();
-  };
-
-  /**
-   * Remove an item from the folder.
-   */
-  Folder.removeItem = function (Item, shallow, i) {
-    var name = Item.name;
-    var Folder = this;
-    // Check if the item is a child
-    if (Item.parent !== Folder) {
-      return;
-    }
-    // Deep removal
-    if (!shallow) {
-      // Remove all descendants of the subfolder.
-      if (Item.isFolder) {
-        for (i in Item.items) {
-          if (!imce.owns(Item.items, i)) {
-            continue;
-          }
-          Item.removeItem(Item.items[i]);
-        }
-      }
-    }
-    // Set item free.
-    Item.deselect();
-    Item.setBusy(false);
-    // Remove subfolder
-    if (Item.isFolder) {
-      if (Item.active) {
-        Folder.activate();
-      }
-      Item.setPath(null);
-      delete Folder.subfolders[name];
-      imce.removeEl(Item.branchEl);
-      Folder.updateSubtree();
-    }
-    // Remove file
-    else {
-      delete Folder.files[name];
-    }
-    // Remove item
-    Folder.items.splice(!i ? Folder.indexOf(Item) : i, 1);
-    delete Item.parent;
-    imce.removeEl(Item.el);
-    Folder.updateStatus();
-  };
-
-  /**
-   * Set folder path.
-   * Register the folder to the tree.
-   */
-  Folder.setPath = function (newpath) {
-    var i;
-    var Folder = this;
-    var oldpath = Folder.path;
-    var subfolders = Folder.subfolders;
-    if (oldpath !== newpath) {
-      // Remove
-      if (newpath == null) {
-        for (i in subfolders) {
-          if (!imce.owns(subfolders, i)) {
-            continue;
-          }
-          subfolders[i].setPath(null);
-        }
-        delete imce.tree[oldpath];
-        delete Folder.path;
-      }
-      // Add
-      else {
-        Folder.path = newpath;
-        imce.tree[newpath] = Folder;
-        Folder.setDisabled(!Folder.getConf());
-        for (i in subfolders) {
-          if (!imce.owns(subfolders, i)) {
-            continue;
-          }
-          subfolders[i].setPath(newpath + '/' + subfolders[i].name);
-        }
-        Folder.updateStatus();
-      }
-    }
-  };
-
-  /**
-   * Returns a permission value.
-   */
-  Folder.getPermission = function (name) {
-    return imce.permissionInFolderConf(name, this.getConf());
-  };
-
-  /**
-   * Returns folder configuration.
-   */
-  Folder.getConf = function () {
-    var conf = this.conf;
-    var parent;
-    if (conf) {
-      return conf;
-    }
-    if (parent = this.parent) {
-      if (conf = parent.getConf()) {
-        if (imce.permissionInFolderConf('browse_subfolders', conf)) {
-          return $.extend({inherited: true}, conf);
-        }
-      }
-    }
-  };
-
-  /**
-   * Sets folder configuration.
-   */
-  Folder.setConf = function (conf) {
-    if (this.conf !== conf) {
-      this.conf = conf;
-      this.setDisabled(!this.getConf());
-    }
-  };
-
-  /**
-   * Open folder.
-   */
-  Folder.open = function (refresh) {
-    if (refresh || !this.content) {
-      this.load();
-    }
-    this.activate();
-  };
-
-  /**
-   * Dynamically load folder contents.
-   */
-  Folder.load = function () {
-    if (this.isReady()) {
-      this.setLoading(true);
-      imce.ajax('browse', {
-        activeFolder: this,
-        customComplete: imce.xFolderLoadComplete
-      });
-    }
-  };
-
-  /**
-   * Activate folder.
-   */
-  Folder.activate = function () {
-    var Folder = this;
-    var oldFolder = imce.activeFolder;
-    var parent = Folder.parent;
-    if (!Folder.active) {
-      // Deactivate the old dir.
-      if (oldFolder) {
-        oldFolder.deactivate();
-      }
-      // Check sort
-      if (Folder.needSort) {
-        Folder.sortItems();
-      }
-      imce.activeFolder = Folder;
-      Folder.active = true;
-      $(Folder.branchEl).addClass('active');
-      // Add the content to the dom if it is fully loaded.
-      if (!Folder.loading) {
-        Folder.addContentToDom();
-      }
-      Folder.setContentVisibility(true);
-      // Expand parents if collapsed.
-      while (parent) {
-        parent.expand();
-        parent = parent.parent;
-      }
-      // Update status and header
-      Folder.updateHeader();
-      Folder.updateStatus();
-      // Trigger activateFolder handlers.
-      imce.trigger('activateFolder', Folder, oldFolder);
-    }
-  };
-
-  /**
-   * Deactivate folder.
-   */
-  Folder.deactivate = function () {
-    var Folder = this;
-    if (Folder.active) {
-      Folder.setContentVisibility(false);
-      imce.deselectAll();
-      imce.activeFolder = null;
-      Folder.active = false;
-      $(Folder.branchEl).removeClass('active');
-    }
-  };
-
-  /**
-   * Set loading state.
-   */
-  Folder.setLoading = function (state) {
-    var Folder = this;
-    if (state) {
-      if (!Folder.loading) {
-        Folder.setBusy(true);
-        Folder.setState('loading');
-        if (Folder.active) {
-          imce.deselectAll();
-        }
-      }
-    }
-    else if (Folder.loading) {
-      Folder.setBusy(false);
-      Folder.unsetState('loading');
-      if (Folder.active) {
-        Folder.addContentToDom();
-      }
-    }
-  };
-
-  /**
-   * Returns an item by name.
-   */
-  Folder.getItem = function (name) {
-    var Folder = this;
-    if (imce.owns(Folder.files, name)) {
-      return Folder.files[name];
-    }
-    if (imce.owns(Folder.subfolders, name)) {
-      return Folder.subfolders[name];
-    }
-  };
-
-  /**
-   * Returns an item by index.
-   */
-  Folder.getItemAt = function (i) {
-    return this.items[i];
-  };
-
-  /**
-   * Returns the index of an item.
-   */
-  Folder.indexOf = function (Item) {
-    return $.inArray(Item, this.items);
-  };
-
-  /**
-   * Selects all items.
-   */
-  Folder.selectAll = function () {
-    for (var i in this.items) {
-      if (!imce.owns(this.items, i)) {
-        continue;
-      }
-      this.items[i].select();
-    }
-  };
-
-  /**
-   * Returns the number of items.
-   */
-  Folder.countItems = function () {
-    return this.items.length;
-  };
-
-  /**
-   * Returns the number of subfolders.
-   */
-  Folder.countSubfolders = function () {
-    var i;
-    var count = 0;
-    for (i in this.subfolders) {
-      if (!imce.owns(this.subfolders, i)) {
-        continue;
-      }
-      count++;
-    }
-    return count;
-  };
-
-  /**
-   * Name change handler.
-   */
-  Folder.onNameChange = function (oldval) {
-    ItemProto.onNameChange.apply(this, arguments);
-    this.branchNameEl.innerHTML = Drupal.checkPlain(this.name);
-  };
-
-  /**
-   * Item name change handler.
-   * Triggered by imce.Item.onNameChange()
-   */
-  Folder.onItemNameChange = function (Item, oldname) {
-    var Folder = this;
-    var name = Item.name;
-    var group = Item.isFolder ? Folder.subfolders : Folder.files;
-    delete group[oldname];
-    group[name] = Item;
-    // Set folder path
-    if (Item.isFolder) {
-      Item.setPath((Folder.parent ? Folder.path + '/' : '') + name);
-    }
-  };
-
-  /**
-   * Double-click handler.
-   */
-  Folder.dblClick = function () {
-    this.open();
-  };
-
-  /**
-   * Inserts the content element into the main content area.
-   */
-  Folder.addContentToDom = function () {
-    var el = this.contentEl;
-    var parentEl = imce.contentEl;
-    if (el.parentNode !== parentEl) {
-      parentEl.appendChild(el);
-    }
-  };
-
-  /**
-   * Sets visibility of the content element.
-   */
-  Folder.setContentVisibility = function (show) {
-    var el = this.contentEl;
-    el.style.display = show ? '' : 'none';
-    if (el.scrollTop) {
-      el.scrollTop = 0;
-    }
-  };
-
-  /**
-   * Prepares for subfolder appending.
-   */
-  Folder.prepareSubtree = function () {
-    var Folder = this;
-    if (Folder.subtreeEl.parentNode !== Folder.branchEl) {
-      Folder.branchEl.appendChild(Folder.subtreeEl);
-      $(Folder.branchEl).removeClass('leaf');
-      // Prevent expanding of inactive dirs except the first activated dir on init
-      if (!Folder.active && imce.activeFolder) {
-        Folder.expanded = true;
-        Folder.shrink();
-      }
-      else {
-        Folder.expand();
-      }
-    }
-  };
-
-  /**
-   * Check and remove subtree element if it's empty.
-   */
-  Folder.updateSubtree = function () {
-    if (!this.countSubfolders()) {
-      this.shrink();
-      imce.removeEl(this.subtreeEl);
-      $(this.branchEl).addClass('leaf');
-    }
-  };
-
-  /**
-   * Expands the subtree.
-   */
-  Folder.expand = function () {
-    if (!this.expanded) {
-      this.expanded = true;
-      $(this.branchEl).addClass('expanded');
-      $(this.subtreeEl).show();
-    }
-  };
-
-  /**
-   * Shrinks the subtree.
-   */
-  Folder.shrink = function () {
-    if (this.expanded) {
-      this.expanded = false;
-      $(this.branchEl).removeClass('expanded');
-      $(this.subtreeEl).hide();
-    }
-  };
-
-  /**
-   * Update folder status.
-   */
-  Folder.updateStatus = function () {
-    if (this.active) {
-      imce.updateStatus();
-    }
-  };
-
-  /**
-   * Update header sort.
-   */
-  Folder.updateHeader = function () {
-    if (this.active) {
-      imce.updateHeader();
-    }
-  };
-
-  /**
-   * Sort folder items by an item property.
-   */
-  Folder.sortItems = function (key, desc) {
-    var i;
-    var sorter;
-    var Folder = this;
-    var items = Folder.items;
-    var active = Folder.activeSort || imce.activeSort || imce.local.activeSort || {};
-    if (key == null) {
-      key = active.key || 'name';
-    }
-    if (desc == null) {
-      desc = !!active.desc;
-    }
-    // Remove lazy sort flag.
-    Folder.needSort = 0;
-    // Check sorter
-    if (sorter = imce.sorters[key]) {
-      items.sort(sorter);
-      if (desc) {
-        items.reverse();
-      }
-      for (i in items) {
-        if (!imce.owns(items, i)) {
-          continue;
-        }
-        this.contentEl.appendChild(items[i].el);
-      }
-      Folder.activeSort = {key: key, desc: desc};
-      Folder.updateHeader();
-    }
-  };
-
-  /**
-   * Sorts folder tree elements by name.
-   */
-  Folder.sortTree = function () {
-    var i;
-    var Folder = this;
-    var subfolders = Folder.subfolders;
-    var arr = [];
-    for (i in subfolders) {
-      if (!imce.owns(subfolders, i)) {
-        continue;
-      }
-      arr.push(subfolders[i]);
-    }
-    if (arr.length > 1) {
-      arr.sort(imce.sortBranchName);
-      for (i in arr) {
-        if (!imce.owns(arr, i)) {
-          continue;
-        }
-        Folder.subtreeEl.appendChild(arr[i].branchEl);
-      }
-    }
-  };
-
-  /**
-   * Check if the item can be appended to the folder.
-   */
-  Folder.validateAppend = function (Item, copy) {
-    // Disallow self appending
-    if (Item === this) {
-      return false;
-    }
-    var parent = Item.parent;
-    // Allow orphan appending
-    if (!parent) {
-      return true;
-    }
-    // Disallow re-appending children
-    if (!copy && parent === this) {
-      return false;
-    }
-    // Disallow (grand)parents appending
-    if (Item.isFolder) {
-      for (parent = this.parent; parent; parent = parent.parent) {
-        if (parent === Item) {
-          return false;
-        }
-      }
-    }
-    return true;
-  };
-
-  /**
-   * Checks if the folder is predefined.
-   */
-  Folder.isPredefined = function () {
-    return !!this.conf;
-  };
-
-  /**
-   * Returns the first predefined descendent including itself.
-   */
-  Folder.hasPredefinedPath = function () {
-    if (this.isPredefined()) {
-      return this;
-    }
-    var i;
-    var Folder;
-    var subfolders = this.subfolders;
-    for (i in subfolders) {
-      if (Folder = subfolders[i].hasPredefinedPath()) {
-        return Folder;
-      }
-    }
-    return false;
-  };
-
-  /**
-   * Returns status text.
-   */
-  Folder.formatStatus = function () {
-    return '<div class="items">' + imce.formatItemsStatus(this.countItems(), this.getSize()) + '</div>';
-  };
-
-  /**
-   * Returns the size of the folder.
-   */
-  Folder.getSize = function () {
-    var i;
-    var size = 0;
-    var files = this.files;
-    for (i in files) {
-      if (!imce.owns(files, i)) {
-        continue;
-      }
-      size += files[i].size || 0;
-    }
-    return size;
-  };
-
-
-  /**
-   * Click event for branch name.
-   */
-  imce.eBranchNameClick = function (event) {
-    this.Folder.open();
-    return false;
-  };
-
-
-  /**
-   * Click event for branch toggle.
-   */
-  imce.eBranchToggleClick = function (event) {
-    var Folder = this.Folder;
-    if (Folder.countSubfolders()) {
-      if (Folder.expanded) {
-        Folder.shrink();
-      }
-      else {
-        Folder.expand();
-      }
-    }
-    else {
-      Folder.open();
-    }
-    return false;
-  };
-
-  /**
-   * Ajax complete handler for folder loading.
-   */
-  imce.xFolderLoadComplete = function (xhr, status) {
-    var content;
-    var opt = this;
-    var Folder = opt.activeFolder;
-    var response = opt.response;
-    if (response && (content = response.content)) {
-      Folder.setContent(content);
-    }
-    Folder.setLoading(false);
-    if (Folder.countSubfolders()) {
-      Folder.expand();
-    }
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/imce.Item.js b/web/modules/imce/js/imce.Item.js
deleted file mode 100644
index 96037bd7a06d8a567d06711e845bc825bf108027..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/imce.Item.js
+++ /dev/null
@@ -1,483 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines imce Item object.
-   */
-
-  /**
-   * Imce Item.
-   */
-  imce.Item = function (name) {
-    this.construct(name);
-  };
-
-  /**
-   * Item prototype.
-   */
-  var Item = imce.Item.prototype;
-
-  /**
-   * Constructs Imce Item.
-   */
-  Item.construct = function (name) {
-    this.createEl();
-    this.setName(name);
-  };
-
-  /**
-   * Creates Item elements.
-   */
-  Item.createEl = function () {
-    var el;
-    var children;
-    var Item = this;
-    if (!Item.el) {
-      el = Item.el = imce.createEl('<div class="imce-item"><div class="imce-item-date"></div><div class="imce-item-height"></div><div class="imce-item-width"></div><div class="imce-item-size"></div><div class="imce-item-icon imce-ficon"></div><div class="imce-item-name"></div></div>');
-      el.onmousedown = imce.eItemMousedown;
-      el.ondblclick = imce.eItemDblclick;
-      el.Item = Item;
-      children = el.children;
-      Item.dateEl = children[0];
-      Item.heightEl = children[1];
-      Item.widthEl = children[2];
-      Item.sizeEl = children[3];
-      Item.iconEl = children[4];
-      Item.nameEl = children[5];
-    }
-  };
-
-  /**
-   * Appends the item to a parent.
-   */
-  Item.appendTo = function (parent) {
-    parent.appendItem(this);
-  };
-
-  /**
-   * Removes the item.
-   */
-  Item.remove = function (shallow) {
-    if (this.parent) {
-      this.parent.removeItem(this, shallow);
-    }
-  };
-
-  /**
-   * Item click handler.
-   */
-  Item.click = function (e) {
-    var Item = this;
-    if (e) {
-      // Range select
-      if (e.shiftKey) {
-        var Folder = imce.activeFolder;
-        var lastItem = imce.getLastSelected();
-        var start = lastItem ? Folder.indexOf(lastItem) : -1;
-        var end = Folder.indexOf(Item);
-        var step = start < end ? 1 : -1;
-        while (start !== end) {
-          Folder.getItemAt(start += step).select();
-        }
-        return;
-      }
-      // Toggle select
-      if (e.ctrlKey) {
-        return Item.toggleSelect();
-      }
-    }
-    var i;
-    var selection = imce.getSelection();
-    for (i in selection) {
-      if (imce.owns(selection, i) && selection[i] !== Item) {
-        selection[i].deselect();
-      }
-    }
-    Item.select();
-  };
-
-  /**
-   * Double click handler.
-   */
-  Item.dblClick = function () {
-    if (imce.sendtoHandler) {
-      imce.runSendtoHandler([this]);
-    }
-    else {
-      this.open();
-    }
-  };
-
-  /**
-   * Opens item.
-   */
-  Item.open = function () {
-    var url = this.getUrl();
-    if (url) {
-      window.open(url);
-    }
-  };
-
-  /**
-   * Selects item.
-   */
-  Item.select = function () {
-    imce.selectItem(this);
-  };
-
-  /**
-   * Deselects item.
-   */
-  Item.deselect = function () {
-    imce.deselectItem(this);
-  };
-
-  /**
-   * Toggles select.
-   */
-  Item.toggleSelect = function () {
-    if (this.selected) {
-      this.deselect();
-    }
-    else {
-      this.select();
-    }
-  };
-
-  /**
-   * Sets/unsets the item busy.
-   */
-  Item.setBusy = function (state) {
-    this.toggleState('busy', !!state);
-  };
-
-  /**
-   * Sets/unsets the item disabled.
-   */
-  Item.setDisabled = function (state) {
-    this.toggleState('disabled', !!state);
-  };
-
-  /**
-   * Checks if the item is ready for an operation.
-   */
-  Item.isReady = function () {
-    return !this.disabled && !this.busy;
-  };
-
-  /**
-   * Returns item path relative to the root.
-   */
-  Item.getPath = function () {
-    var parent;
-    var path = this.path;
-    if (path) {
-      return path;
-    }
-    if (parent = this.parent) {
-      if (path = parent.getPath()) {
-        return imce.joinPaths(path, this.name);
-      }
-    }
-  };
-
-  /**
-   * Returns item uri.
-   */
-  Item.getUri = function () {
-    var path = this.getPath();
-    if (path) {
-      return imce.joinPaths(imce.getConf('root_uri', '/'), path);
-    }
-  };
-
-  /**
-   * Returns item url.
-   * Uncached parameter allows unique urls per size+date which is useful to display resized/cropped images
-   */
-  Item.getUrl = function (absolute, uncached) {
-    var rootUrl;
-    var url = '';
-    if (rootUrl = imce.getConf('root_url')) {
-      url = imce.joinPaths(rootUrl, encodeURIComponent(this.getPath()).replace(/%2F/g, '/'));
-      if (absolute && url.charAt(0) === '/' && url.charAt(1) !== '/') {
-        url = location.protocol + '//' + location.host + url;
-      }
-      if (uncached) {
-        url += (url.indexOf('?') === -1 ? '?' : '&') + ('s' + this.size) + ('d' + this.date);
-      }
-    }
-    return url;
-  };
-
-  /**
-   * Formats item uri.
-   */
-  Item.formatUri = function () {
-    return Drupal.checkPlain(this.getUri());
-  };
-
-  /**
-   * Formats item path.
-   */
-  Item.formatPath = function () {
-    return Drupal.checkPlain(this.path === '.' ? this.name : this.getPath());
-  };
-
-  /**
-   * Formats item name.
-   */
-  Item.formatName = function () {
-    return Drupal.checkPlain(this.name);
-  };
-
-  /**
-   * Formats item size.
-   */
-  Item.formatSize = function () {
-    return imce.formatSize(this.size);
-  };
-
-  /**
-   * Formats item date.
-   */
-  Item.formatDate = function (dayOnly) {
-    return imce.formatDate(this.date, dayOnly);
-  };
-
-  /**
-   * Formats item width.
-   */
-  Item.formatWidth = function () {
-    return this.width ? this.width * 1 + '' : '';
-  };
-
-  /**
-   * Formats item height.
-   */
-  Item.formatHeight = function () {
-    return this.height ? this.height * 1 + '' : '';
-  };
-
-  /**
-   * Formats item dimensions.
-   */
-  Item.formatDimensions = function () {
-    return this.width ? this.width * 1 + 'x' + this.height * 1 : '';
-  };
-
-  /**
-   * Adds new item properties.
-   * Fires property change events for changed properties.
-   */
-  Item.extend = function (props) {
-    if (props) {
-      for (var i in props) {
-        if (!imce.owns(props, i)) {
-          continue;
-        }
-        this.setProperty(i, props[i]);
-      }
-    }
-  };
-
-  /**
-   * Sets property value and trigger change events.
-   */
-  Item.setProperty = function (prop, val) {
-    var oldval = this[prop];
-    if (oldval !== val) {
-      this[prop] = val;
-      this.triggerPropertyChange(prop, oldval);
-    }
-  };
-
-  /**
-   * Sets item name.
-   */
-  Item.setName = function (name) {
-    this.setProperty('name', name);
-  };
-
-  /**
-   * Triggers property change handlers.
-   */
-  Item.triggerPropertyChange = function (prop, oldval) {
-    var method = 'on' + prop.charAt(0).toUpperCase() + prop.substr(1) + 'Change';
-    if (this[method]) {
-      this[method](oldval);
-      if (this === imce.previewingItem) {
-        imce.updatePreview();
-      }
-    }
-  };
-
-  /**
-   * Name change handler.
-   */
-  Item.onNameChange = function (oldname) {
-    var Item = this;
-    Item.nameEl.innerHTML = Item.formatName();
-    if (Item.parent) {
-      Item.parent.onItemNameChange(Item, oldname);
-    }
-  };
-
-  /**
-   * Size change handler.
-   */
-  Item.onSizeChange = function (oldval) {
-    this.sizeEl.innerHTML = this.formatSize();
-  };
-
-  /**
-   * Date change handler.
-   */
-  Item.onDateChange = function (oldval) {
-    this.dateEl.innerHTML = this.formatDate(true);
-    this.dateEl.title = this.formatDate();
-  };
-
-  /**
-   * Width change handler.
-   */
-  Item.onWidthChange = function (oldval) {
-    this.widthEl.innerHTML = this.formatWidth();
-  };
-
-  /**
-   * Height change handler.
-   */
-  Item.onHeightChange = function (oldval) {
-    this.heightEl.innerHTML = this.formatHeight();
-  };
-
-
-  /**
-   * Creates preview element.
-   */
-  Item.createPreviewEl = function () {
-    var el;
-    var Item = this;
-    var prvEl = imce.createEl('<div class="imce-item-preview"></div>');
-    // Info
-    var infoEl = imce.createEl('<div class="imce-preview-info"></div>');
-    prvEl.appendChild(infoEl);
-    // Folder
-    if (Item.isFolder) {
-      infoEl.appendChild(imce.createEl('<div class="path">' + Item.formatUri() + '</div>'));
-      prvEl.className += ' folder';
-    }
-    // File
-    else {
-      var url = Item.getUrl(true);
-      infoEl.appendChild(imce.createEl('<div class="url"><a href="' + url + '" target="_blank">' + url + '</a></div>'));
-    }
-    // Size
-    if (Item.size) {
-      infoEl.appendChild(imce.createEl('<div class="size">' + Item.formatSize() + '</div>'));
-    }
-    // Dimensions
-    if (Item.width) {
-      infoEl.appendChild(imce.createEl('<div class="dimensions">' + Item.formatDimensions() + '</div>'));
-    }
-    // Date
-    if (Item.date) {
-      infoEl.appendChild(imce.createEl('<div class="date">' + Item.formatDate() + '</div>'));
-    }
-    // Image
-    if (Item.isImageSource() && imce.getConf('preview_images', 1)) {
-      el = imce.createEl('<div class="imce-preview-image"><img src="' + Item.getUrl(false, true) + '"></div>');
-      prvEl.appendChild(el);
-      prvEl.className += ' image';
-      el.firstChild.onclick = imce.ePrvImgClick;
-    }
-    return prvEl;
-  };
-
-  /**
-   * Sets a state by name.
-   */
-  Item.setState = function (name) {
-    var el;
-    var Item = this;
-    if (!Item[name]) {
-      Item[name] = true;
-      $(Item.el).addClass(name);
-      if (el = Item.branchEl) {
-        $(el).addClass(name);
-      }
-    }
-  };
-
-  /**
-   * Unsets a state by name.
-   */
-  Item.unsetState = function (name) {
-    var el;
-    var Item = this;
-    if (Item[name]) {
-      Item[name] = false;
-      $(Item.el).removeClass(name);
-      if (el = Item.branchEl) {
-        $(el).removeClass(name);
-      }
-    }
-  };
-
-  /**
-   * Toggles a state by name.
-   */
-  Item.toggleState = function (name, state) {
-    if (state == null) {
-      state = !this[name];
-    }
-    this[state ? 'setState' : 'unsetState'](name);
-  };
-
-  /**
-   * Scroll the item element into view.
-   */
-  Item.scrollIntoView = function () {
-    imce.scrollToEl(this.el, imce.contentEl, imce.contentHeaderEl.offsetHeight, imce.contentStatusEl.offsetHeight);
-  };
-
-  /**
-   * Check if the item can be used as an image source.
-   */
-  Item.isImageSource = function() {
-    return this.width || this.ext && this.ext.toLowerCase() === 'svg';
-  };
-
-
-  /**
-   * Mousedown event for items.
-   */
-  imce.eItemMousedown = function (event) {
-    var e = imce.eFix(event);
-    this.Item.click(e);
-    return !(e.ctrlKey || e.shiftKey);
-  };
-
-  /**
-   * Double-click event for items.
-   */
-  imce.eItemDblclick = function (event) {
-    this.Item.dblClick();
-    return false;
-  };
-
-  /**
-   * Click event for preview image.
-   */
-  imce.ePrvImgClick = function () {
-    var Item = imce.previewingItem;
-    if (Item) {
-      Item.dblClick();
-    }
-    return false;
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/imce.Tbb.js b/web/modules/imce/js/imce.Tbb.js
deleted file mode 100644
index dc68b964a3cb56361f38288a4f94ace36f2c243b..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/imce.Tbb.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines imce Toolbar Button object.
-   */
-
-  /**
-   * Toolbar button constructor.
-   */
-  imce.Tbb = function (id, opt) {
-    this.construct(id, opt);
-  };
-
-  /**
-   * Toolbar button prototype.
-   */
-  var Tbb = imce.Tbb.prototype;
-
-  /**
-   * Constructs button object.
-   */
-  Tbb.construct = function (id, opt) {
-    var Tbb = imce.toolbarButtons[id] = this;
-    Tbb.id = id;
-    $.extend(Tbb, opt);
-    // Append or prepend the element.
-    var el = Tbb.createEl();
-    var parent = imce.toolbarEl;
-    if (Tbb.prepend && parent.firstChild) {
-      parent.insertBefore(el, parent.firstChild);
-    }
-    else {
-      parent.appendChild(el);
-    }
-    // Add shortcut
-    if (Tbb.shortcut) {
-      imce.addShortcut(Tbb.shortcut, el);
-    }
-  };
-
-  /**
-   * Creates toolbar button element.
-   */
-  Tbb.createEl = function () {
-    var Tbb = this;
-    var el = Tbb.el;
-    var icon;
-    if (!el) {
-      el = Tbb.el = imce.createEl('<span class="imce-tbb imce-ficon" role="button"><span class="imce-tbb-title"></span></span>');
-      if (icon = Tbb.icon) {
-        el.className += ' imce-ficon-' + icon;
-      }
-      el.className += ' imce-tbb--' + Tbb.id;
-      el.title = (Tbb.tooltip || Tbb.title) + (Tbb.shortcut ? ' (' + Tbb.shortcut + ')' : '');
-      el.onclick = imce.eTbbClick;
-      el.Tbb = Tbb;
-      el.firstChild.innerHTML = Tbb.title;
-    }
-    return el;
-  };
-
-  /**
-   * Create item popup.
-   */
-  Tbb.createPopupEl = function () {
-    var Tbb = this;
-    var el = Tbb.popupEl;
-    if (!el) {
-      el = Tbb.popupEl = imce.createLayer('imce-tbb-popup');
-      el.className += ' imce-tbb-popup--' + Tbb.id;
-      el.onkeydown = imce.eTbbPopupKeydown;
-      el.Tbb = Tbb;
-      if (Tbb.content) {
-        el.appendChild(Tbb.content);
-      }
-    }
-    return el;
-  };
-
-  /**
-   * Open item popup.
-   */
-  Tbb.openPopup = function (autoclose) {
-    var Tbb = this;
-    if (!Tbb.active) {
-      Tbb.createPopupEl();
-      Tbb.setActive(true);
-      var popupEl = Tbb.popupEl;
-      var $el = $(Tbb.el);
-      var css = $el.offset();
-      css.top += $el.outerHeight(true);
-      $(popupEl).css(css).fadeIn();
-      imce.fixPosition(popupEl);
-      // Focus on first input
-      $('form').find('input,select,textarea').filter(':visible').eq(0).focus();
-      if (autoclose) {
-        $(document).bind('mousedown', {Tbb: Tbb}, imce.eTbbDocMousedown);
-      }
-      if (Tbb.onopen) {
-        Tbb.onopen.apply(Tbb, arguments);
-      }
-    }
-  };
-
-  /**
-   * Close item popup.
-   */
-  Tbb.closePopup = function () {
-    var Tbb = this;
-    if (Tbb.popupEl && Tbb.active) {
-      Tbb.setActive(false);
-      $(Tbb.popupEl).hide();
-      imce.contentEl.focus();
-      if (Tbb.onclose) {
-        Tbb.onclose.apply(Tbb, arguments);
-      }
-    }
-  };
-
-  /**
-   * Set active state of the item.
-   */
-  Tbb.setActive = function (state) {
-    this.toggleState('active', !!state);
-  };
-
-  /**
-   * Set busy state of the item.
-   */
-  Tbb.setBusy = function (state) {
-    this.toggleState('busy', !!state);
-  };
-
-  /**
-   * Set disabled state of the item.
-   */
-  Tbb.setDisabled = function (state) {
-    this.toggleState('disabled', !!state);
-  };
-
-  /**
-   * Set/unset a state by name.
-   */
-  Tbb.toggleState = function (name, state) {
-    var Tbb = this;
-    var oldState = Tbb[name];
-    if (state == null) {
-      state = !oldState;
-    }
-    if (state) {
-      if (!oldState) {
-        Tbb[name] = true;
-        $(Tbb.el).addClass(name);
-      }
-    }
-    else if (oldState) {
-      Tbb[name] = false;
-      $(Tbb.el).removeClass(name);
-    }
-  };
-
-  /**
-   * Trigger click handler of the button.
-   */
-  Tbb.click = function (event) {
-    var Tbb = this;
-    if (!Tbb.disabled) {
-      if (Tbb.handler && !Tbb.busy) {
-        Tbb.handler.call(Tbb, imce.eFix(event));
-      }
-      if (Tbb.content) {
-        Tbb.openPopup(true);
-      }
-    }
-  };
-
-
-  /**
-   * Click event for toolbar buttons.
-   */
-  imce.eTbbClick = function (event) {
-    this.Tbb.click(event);
-  };
-
-  /**
-   * Mousedown event for document in order to close toolbar button popup.
-   */
-  imce.eTbbDocMousedown = function (e) {
-    var Tbb = e.data.Tbb;
-    var el = Tbb.popupEl;
-    if (el !== e.target && !$.contains(el, e.target)) {
-      Tbb.closePopup();
-      $(document).unbind('mousedown', imce.eTbbDocMousedown);
-    }
-  };
-
-  /**
-   * Keydown event for toolbar button popup.
-   */
-  imce.eTbbPopupKeydown = function (event) {
-    var e = event || window.event;
-    // Close on Esc
-    if (e.keyCode === 27) {
-      this.Tbb.closePopup();
-      return false;
-    }
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/imce.filefield.js b/web/modules/imce/js/imce.filefield.js
deleted file mode 100644
index 3bb349eabb4f4f857950724774f0461fe8407db7..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/imce.filefield.js
+++ /dev/null
@@ -1,95 +0,0 @@
-(function ($, Drupal) {
-  "use strict";
-
-  /**
-   * @file
-   * Integrates Imce into file field widgets.
-   */
-
-  /**
-   * Global container for helper methods.
-   */
-  var imceFileField = window.imceFileField = {};
-
-  /**
-   * Drupal behavior to handle imce file field integration.
-   */
-  Drupal.behaviors.imceFileField = {
-    attach: function (context, settings) {
-      var i;
-      var el;
-      var $els = $('.imce-filefield-paths', context).not('.iff-processed').addClass('iff-processed');
-      for (i = 0; el = $els[i]; i++) {
-        imceFileField.processInput(el);
-      }
-    }
-  };
-
-  /**
-   * Processes an imce file field input to create a widget.
-   */
-  imceFileField.processInput = function (el) {
-    var widget;
-    var url = el.getAttribute('data-imce-url');
-    var fieldId = el.getAttribute('data-drupal-selector').split('-imce-paths')[0];
-    if (url && fieldId) {
-      url += (url.indexOf('?') === -1 ? '?' : '&') + 'sendto=imceFileField.sendto&fieldId=' + fieldId;
-      widget = $(imceFileField.createWidget(url)).insertBefore(el.parentNode)[0];
-      widget.parentNode.className += ' imce-filefield-parent';
-    }
-    return widget;
-  };
-
-  /**
-   * Creates an imce file field widget with the given url.
-   */
-  imceFileField.createWidget = function (url) {
-    var $link = $('<a class="imce-filefield-link">' + Drupal.t('Open File Browser') + '</a>');
-    $link.attr('href', url).click(imceFileField.eLinkClick);
-    return $('<div class="imce-filefield-widget"></div>').append($link)[0];
-  };
-
-  /**
-   * Click event for the browser link.
-   */
-  imceFileField.eLinkClick = function (e) {
-    window.open(this.href, '', 'width=760,height=560,resizable=1');
-    e.preventDefault();
-  };
-
-  /**
-   * Handler for imce sendto operation.
-   */
-  imceFileField.sendto = function (File, win) {
-    var imce = win.imce;
-    var items = imce.getSelection();
-    var fieldId = imce.getQuery('fieldId');
-    var exts = imceFileField.getFieldExts(fieldId);
-    // Check extensions
-    if (exts && !imce.validateExtensions(items, exts)) {
-      return;
-    }
-    // Submit form with selected item paths
-    imceFileField.submit(fieldId, imce.getItemPaths(items));
-    win.close();
-  };
-
-
-  /**
-   * Returns allowed extensions for a field.
-   */
-  imceFileField.getFieldExts = function (fieldId) {
-    var settings = drupalSettings.file;
-    var elements = settings && settings.elements;
-    return elements ? elements['#' + fieldId] : false;
-  };
-
-  /**
-   * Submits a field widget with selected file paths.
-   */
-  imceFileField.submit = function (fieldId, paths) {
-    $('[data-drupal-selector="' + fieldId + '-imce-paths"]').val(paths.join(':'));
-    $('[data-drupal-selector="' + fieldId + '-upload-button"]').mousedown();
-  };
-
-})(jQuery, Drupal);
diff --git a/web/modules/imce/js/imce.input.js b/web/modules/imce/js/imce.input.js
deleted file mode 100644
index 54babfb4ce65d6bc868a43b60d95fc5459dc3b62..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/imce.input.js
+++ /dev/null
@@ -1,80 +0,0 @@
-(function ($, Drupal) {
-  "use strict";
-
-  /**
-   * @file
-   * Provides methods for integrating Imce into text fields.
-   */
-
-  /**
-   * Drupal behavior to handle url input integration.
-   */
-  Drupal.behaviors.imceUrlInput = {
-    attach: function (context, settings) {
-      $('.imce-url-input', context).not('.imce-url-processed').addClass('imce-url-processed').each(imceInput.processUrlInput);
-    }
-  };
-  
-  /**
-   * Global container for integration helpers.
-   */
-  var imceInput = window.imceInput = window.imceInput || {
-
-    /**
-     * Processes an url input.
-     */
-    processUrlInput: function(i, el) {
-      var button = imceInput.createUrlButton(el.id, el.getAttribute('data-imce-type'));
-      el.parentNode.insertBefore(button, el);
-    },
-
-    /**
-     * Creates an url input button.
-     */
-    createUrlButton: function(inputId, inputType) {
-      var button = document.createElement('a');
-      button.href = '#';
-      button.className = 'imce-url-button';
-      button.innerHTML = '<span>' + Drupal.t('Open File Browser') + '</span>';
-      button.onclick = imceInput.urlButtonClick;
-      button.InputId = inputId || 'imce-url-input-' + (Math.random() + '').substr(2);
-      button.InputType = inputType || 'link';
-      return button;
-    },
-
-    /**
-     * Click event of an url button.
-     */
-    urlButtonClick: function(e) {
-      var url = Drupal.url('imce');
-      url += (url.indexOf('?') === -1 ? '?' : '&') + 'sendto=imceInput.urlSendto&inputId=' + this.InputId + '&type=' + this.InputType;
-      // Focus on input before opening the window
-      $('#' + this.InputId).focus();
-      window.open(url, '', 'width=' + Math.min(1000, parseInt(screen.availWidth * 0.8, 10)) + ',height=' + Math.min(800, parseInt(screen.availHeight * 0.8, 10)) + ',resizable=1');
-      return false;
-    },
-
-    /**
-     * Sendto handler for an url input.
-     */
-    urlSendto: function(File, win) {
-      var url = File.getUrl();
-      var el = $('#' + win.imce.getQuery('inputId'))[0];
-      win.close();
-      if (el) {
-        $(el).val(url).change().focus();
-        // Auto-update image alt input with image name.
-        var name = el.name;
-        var re = /(^|[^a-z])src([^a-z]|$)/i;
-        if (name && re.test(name)) {
-          var altEl = el.form && el.form.elements[name.replace(re, '$1alt$2')];
-          if (altEl && !altEl.value) {
-            altEl.value = el.value.split('/').pop();
-          }
-        }
-      }
-    }
-  
-  };
-
-})(jQuery, Drupal);
diff --git a/web/modules/imce/js/imce.js b/web/modules/imce/js/imce.js
deleted file mode 100644
index c6b420bf259c6ec98bc42382324329c79a3b0e61..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/imce.js
+++ /dev/null
@@ -1,1961 +0,0 @@
-(function ($, Drupal) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines Imce File Manager.
-   */
-
-  /**
-   * Global container.
-   */
-  var imce = window.imce = {
-    // Configuration options
-    conf: {},
-    // Locally stored data
-    local: {},
-    // Events
-    events: {},
-    // Shortcuts
-    shortcuts: {fm: {}, tree: {}, content: {}},
-    // Toolbar buttons
-    toolbarButtons: {},
-    // Folder tree
-    tree: {},
-    // Currently selected items
-    selection: [],
-    // Message queue
-    messageQueue: [],
-    // Sort handlers
-    sorters: {}
-  };
-
-  /**
-   * Initiate imce on document ready.
-   */
-  $(document).ready(function () {
-    var settings = window.drupalSettings;
-    var conf = settings && settings.imce;
-    var body = document.body;
-    if (conf && !imce.activeFolder && $(body).hasClass('imce-page')) {
-      if (!conf.ajax_url) {
-        conf.ajax_url = Drupal.url(settings.path.currentPath);
-      }
-      imce.init(conf, body);
-    }
-  });
-
-  /**
-   * Initialize imce.
-   */
-  imce.init = function (conf, parentEl) {
-    // Set conf
-    conf = $.extend(imce.conf, conf);
-    if (!conf.ajax_url || !conf.folders || !conf.root_url) {
-      return;
-    }
-    imce.parentEl = parentEl;
-    // Get stored data
-    try {
-      $.extend(imce.local, JSON.parse(localStorage.getItem('imce.local')));
-    }
-    catch (err) {
-      imce.delayError(err);
-    }
-    // Init
-    imce.trigger('preinit');
-    imce.checkIntegration();
-    imce.initUI();
-    imce.initTree();
-    // Add shortcuts
-    imce.addShortcut('ENTER', imce.eTreeEnter, 'tree');
-    imce.addShortcut('UP', imce.eTreeUp, 'tree');
-    imce.addShortcut('DOWN', imce.eTreeDown, 'tree');
-    imce.addShortcut('LEFT', imce.eTreeLR, 'tree');
-    imce.addShortcut('RIGHT', imce.eTreeLR, 'tree');
-    imce.addShortcut('ENTER', imce.eContentEnter, 'content');
-    imce.addShortcut('UP', imce.eContentArrow, 'content');
-    imce.addShortcut('DOWN', imce.eContentArrow, 'content');
-    imce.addShortcut('LEFT', imce.eContentArrow, 'content');
-    imce.addShortcut('RIGHT', imce.eContentArrow, 'content');
-    imce.addShortcut('Ctrl+A', imce.eContentCtrlA, 'content');
-    // Add refresh button
-    imce.addTbb('refresh', {
-      title: Drupal.t('Refresh'),
-      permission: 'browse_files|browse_subfolders',
-      handler: imce.eFmRefresh,
-      shortcut: 'F5',
-      icon: 'refresh'
-    });
-    // Register default activeFolder handler
-    imce.bind('activateFolder', imce.defaultActivateFolder);
-    // Trigger init handlers
-    imce.trigger('init');
-    // Create sendto toolbar button if needed.
-    imce.createSendtoTbb();
-    // Add the file manager to the page
-    parentEl.appendChild(imce.fmEl);
-    // Set window events
-    $(window).bind('beforeunload', imce.eWinBeforeunload).bind('resize', imce.eWinResize);
-    imce.eWinResize();
-    // Content focus
-    imce.contentEl.focus();
-    // Set initial messages
-    imce.ajaxProcessMessages(conf);
-    // Open active path
-    var path = conf.active_path;
-    var Folder = path && imce.addFolder(path);
-    if (!Folder) {
-      for (path in conf.folders) {
-        if (Folder = imce.getFolder(path)) {
-          break;
-        }
-      }
-    }
-    if (Folder) {
-      Folder.open();
-    }
-    // Triger postinit
-    imce.trigger('postinit');
-  };
-
-  /**
-   * Init UI elements.
-   */
-  imce.initUI = function () {
-    var el = imce.fmEl;
-    var createEl = imce.createEl;
-    if (el) {
-      return el;
-    }
-    el = imce.fmEl = createEl('<div id="imce-fm"></div>');
-    el.onkeydown = imce.eFmKeydown;
-    el.tabIndex = 0;
-    // Toolbar
-    el.appendChild(imce.toolbarEl = createEl('<div id="imce-toolbar"></div>'));
-    // Body
-    el.appendChild(imce.bodyEl = createEl('<div id="imce-body"></div>'));
-    // Tree
-    el = imce.treeEl = createEl('<div id="imce-tree"></div>');
-    el.onkeydown = imce.eTreeKeydown;
-    el.onmousedown = imce.eTreeMousedown;
-    el.ontouchstart = imce.eTreeTouchstart;
-    el.tabIndex = 0;
-    imce.bodyEl.appendChild(el);
-    // Tree resizer
-    el = imce.treeResizerEl = createEl('<div id="imce-tree-resizer"></div>');
-    el.onmousedown = imce.eTreeResizerMousedown;
-    el.ontouchstart = imce.eTreeResizerTouchstart;
-    imce.bodyEl.appendChild(el);
-    // Content
-    el = imce.contentEl = createEl('<div id="imce-content"></div>');
-    el.onmousedown = imce.eContentMousedown;
-    el.ontouchstart = imce.eContentTouchstart;
-    el.onkeydown = imce.eContentKeydown;
-    el.onscroll = imce.eContentScroll;
-    el.tabIndex = 0;
-    imce.bodyEl.appendChild(el);
-    // Content header
-    el = imce.contentHeaderEl = imce.createEl('<div class="imce-content-header"><div class="imce-item"><div class="imce-item-date" data-sort="date">' + Drupal.t('Date') + '</div><div class="imce-item-height" data-sort="height">' + Drupal.t('Height') + '</div><div class="imce-item-width" data-sort="width">' + Drupal.t('Width') + '</div><div class="imce-item-size" data-sort="size">' + Drupal.t('Size') + '</div><div class="imce-item-icon imce-ficon" data-sort="ext"></div><div class="imce-item-name" data-sort="name">' + Drupal.t('Name') + '</div></div></div>');
-    el.onclick = imce.eContentHeaderClick;
-    imce.contentEl.appendChild(el);
-    // Content status
-    el = imce.contentStatusEl = imce.createEl('<div class="imce-content-status"></div>');
-    imce.contentEl.appendChild(el);
-    // Body resizer
-    el = imce.bodyResizerEl = createEl('<div id="imce-body-resizer"></div>');
-    el.onmousedown = imce.eBodyResizerMousedown;
-    el.ontouchstart = imce.eBodyResizerTouchstart;
-    imce.fmEl.appendChild(el);
-    // Preview
-    imce.fmEl.appendChild(imce.previewEl = createEl('<div id="imce-preview"></div>'));
-    return el;
-  };
-
-  /**
-   * Init folder tree.
-   */
-  imce.initTree = function () {
-    var path;
-    var folders = imce.getConf('folders');
-    // Create root
-    var scheme = imce.getConf('scheme');
-    var root = new imce.Folder(scheme ? scheme + '://' : '<' + Drupal.t('root') + '>');
-    root.setPath('.');
-    root.branchEl.className += ' root';
-    imce.treeEl.appendChild(root.branchEl);
-    // Create predefined folders.
-    for (path in folders) {
-      if (imce.owns(folders, path)) {
-        imce.addFolder(path, folders[path]);
-      }
-    }
-  };
-
-  /**
-   * Returns a folder by path.
-   */
-  imce.getFolder = function (path) {
-    if (imce.owns(imce.tree, path)) {
-      return imce.tree[path];
-    }
-  };
-
-  /**
-   * Returns an item by path.
-   */
-  imce.getItem = function (path) {
-    var Folder;
-    var parts = imce.splitPath(path);
-    if (parts) {
-      if (Folder = imce.getFolder(parts[0])) {
-        return Folder.getItem(parts[1]);
-      }
-    }
-  };
-
-  /**
-   * Adds a folder to the tree.
-   */
-  imce.addFolder = function (path, conf) {
-    var parts;
-    var parent;
-    var Folder = imce.getFolder(path);
-    // Existing
-    if (Folder) {
-      if (conf) {
-        Folder.setConf(conf);
-      }
-      return Folder;
-    }
-    // New. Append to the parent.
-    if (parts = imce.splitPath(path)) {
-      if (parent = imce.addFolder(parts[0])) {
-        Folder = new imce.Folder(parts[1], conf);
-        parent.appendItem(Folder);
-        return Folder;
-      }
-    }
-  };
-
-  /**
-   * Add a toolbar button.
-   */
-  imce.addTbb = function (id, opt) {
-    return imce.getTbb(id) || new imce.Tbb(id, opt);
-  };
-
-  /**
-   * Returns a toolbar button.
-   */
-  imce.getTbb = function (id) {
-    return imce.toolbarButtons[id];
-  };
-
-  /**
-   * Returns a configuration option.
-   */
-  imce.getConf = function (name, defaultValue) {
-    var value;
-    var conf = imce.conf;
-    if (!name) {
-      return conf;
-    }
-    value = conf[name];
-    return value == null ? defaultValue : value;
-  };
-
-
-  /**
-   * Returns a copy of selected items.
-   */
-  imce.getSelection = function () {
-    return imce.selection.slice(0);
-  };
-
-  /**
-   * Counts selected items.
-   */
-  imce.countSelection = function () {
-    return this.selection.length;
-  };
-
-  /**
-   * Returns the selected items grouped by parent folder and type.
-   */
-  imce.groupSelection = function () {
-    return imce.groupItems(imce.selection);
-  };
-
-  /**
-   * Select all items in the active folder.
-   */
-  imce.selectAll = function () {
-    var Folder = imce.activeFolder;
-    if (Folder) {
-      Folder.selectAll();
-    }
-  };
-
-  /**
-   * Deselects all items.
-   */
-  imce.deselectAll = function () {
-    var i;
-    var arr = imce.getSelection();
-    for (i in arr) {
-      if (imce.owns(arr, i)) {
-        arr[i].deselect();
-      }
-    }
-  };
-
-  /**
-   * Returns last selected item.
-   */
-  imce.getLastSelected = function () {
-    var arr = imce.selection;
-    var len = arr.length;
-    if (len) {
-      return arr[len - 1];
-    }
-  };
-
-  /**
-   * Adds an item to the selection.
-   */
-  imce.selectItem = function (Item) {
-    if (!Item.selected) {
-      var arr = imce.selection;
-      var oldlen = arr.length;
-      arr.push(Item);
-      Item.setState('selected');
-      if (oldlen < 2) {
-        imce.updatePreview();
-      }
-    }
-  };
-
-  /**
-   * Removes an item from the selection.
-   */
-  imce.deselectItem = function (Item) {
-    if (Item.selected) {
-      var arr = imce.selection;
-      var i = $.inArray(Item, arr);
-      Item.unsetState('selected');
-      if (i !== -1) {
-        arr.splice(i, 1);
-        if (arr.length < 2) {
-          imce.updatePreview();
-        }
-      }
-    }
-  };
-
-
-  /**
-   * Checks external application integration by URL parameters.
-   *
-   * Ex-1: http://example.com/imce?sendto=HANDLER
-   * Creates a sendto operation that calls HANDLER(File, imceWin) of the parent window.
-   * Ex-2: http://example.com/imce?urlField=FIELD-ID
-   * Creates a sendto operation that fills the field in parent window with the selected file's URL.
-   * Ex-3: http://example.com/imce?oninit=HANDLER
-   * Calls HANDLER() with imce context when the UI is ready.
-   */
-  imce.checkIntegration = function () {
-    var query = imce.getQuery();
-    var handler;
-    var urlField;
-    var parentWin = window.opener || window.parent;
-    if (imce.parentWin = parentWin) {
-      // Check sendto handler
-      if (handler = imce.resolveHandler(query.sendto, parentWin)) {
-        imce.sendtoHandler = handler;
-      }
-      // Check url field
-      else if (urlField = query.urlField) {
-        if (urlField = parentWin.document.getElementById(urlField)) {
-          imce.sendtoHandler = function (Item, win) {
-            try {
-              imce.parentWin.focus();
-              (imce.parentWin.jQuery||$)(urlField).val(Item.getUrl()).blur().change().focus();
-            }
-            catch (err) {
-              imce.delayError(err);
-            }
-            win.close();
-          };
-        }
-      }
-      // Check init handler
-      if (handler = imce.resolveHandler(query.oninit, parentWin)) {
-        imce.bind('init', handler);
-      }
-      // Store sendto type
-      if (imce.sendtoHandler && query.type) {
-        imce.sendtoType = query.type;
-      }
-    }
-  };
-
-  /**
-   * Creates the sendto toolbar button.
-   */
-  imce.createSendtoTbb = function (title, desc) {
-    if (imce.sendtoHandler && !imce.getTbb('sendto')) {
-      return imce.addTbb('sendto', {
-        title: title || Drupal.t('Select'),
-        tooltip: desc || Drupal.t('Use the selected file.'),
-        handler: function () {
-          imce.runSendtoHandler();
-        },
-        icon: 'check'
-      });
-    }
-  };
-
-  /**
-   * Runs custom sendto handler on the first selected item.
-   */
-  imce.runSendtoHandler = function (items) {
-    var handler = imce.sendtoHandler;
-    if (handler) {
-      var Item;
-      var imgType = imce.sendtoType === 'image';
-      items = items || imce.getSelection();
-      for (var i in items) {
-        if (imce.owns(items, i)) {
-          Item = items[i];
-          if (imgType ? Item.isImageSource() : Item.isFile) {
-            return handler(Item, window);
-          }
-        }
-      }
-    }
-  };
-
-  /**
-   * Default handler for activateFolder event.
-   */
-  imce.defaultActivateFolder = function (Folder, oldFolder) {
-    // Enable/disable toolbar buttons by permission.
-    var i;
-    var j;
-    var Tbb;
-    var perm;
-    var disabled;
-    var buttons = imce.toolbarButtons;
-    for (i in buttons) {
-      if (!imce.owns(buttons, i)) {
-        continue;
-      }
-      Tbb = buttons[i];
-      if (perm = Tbb.permission) {
-        perm = perm.split('|');
-        disabled = true;
-        for (j in perm) {
-          if (Folder.getPermission(perm[j])) {
-            disabled = false;
-            break;
-          }
-        }
-        Tbb.setDisabled(disabled);
-      }
-    }
-  };
-
-
-  /**
-   * Updates the active sort state in the content header.
-   */
-  imce.updateHeader = function () {
-    var newsort = imce.activeFolder.activeSort;
-    var oldsort = imce.activeSort || {};
-    var el = imce.contentHeaderEl;
-    // Check if the sort has changed.
-    if (newsort && (newsort.key !== oldsort.key || newsort.desc !== oldsort.desc)) {
-      // Deactivate existing column
-      if (oldsort.key) {
-        $('[data-sort="' + oldsort.key + '"]', el).removeClass('sorted ' + (oldsort.desc ? 'desc' : 'asc'));
-      }
-      // Activate new column
-      $('[data-sort="' + newsort.key + '"]', el).addClass('sorted ' + (newsort.desc ? 'desc' : 'asc'));
-      // Store the values
-      imce.activeSort = newsort;
-    }
-  };
-
-  /**
-   * Schedule preview updating.
-   */
-  imce.updatePreview = function () {
-    clearTimeout(imce.previewTimer);
-    imce.previewTimer = setTimeout(imce.doUpdatePreview, 100);
-  };
-
-  /**
-   * Set preview of currently selected item.
-   */
-  imce.doUpdatePreview = function () {
-    imce.previewItem(imce.countSelection() === 1 ? imce.getLastSelected() : null);
-  };
-
-  /**
-   * Sets/clears item preview.
-   */
-  imce.previewItem = function (Item) {
-    var currentItem = imce.previewingItem;
-    if (imce.previewingItem = Item) {
-      $(imce.previewEl).html(Item.createPreviewEl());
-      imce.trigger('previewItem', Item);
-    }
-    else if (currentItem) {
-      imce.previewEl.innerHTML = '';
-    }
-  };
-
-  /**
-   * Schedule status update.
-   */
-  imce.updateStatus = function () {
-    clearTimeout(imce.statusTimer);
-    imce.statusTimer = setTimeout(imce.doUpdateStatus, 100);
-  };
-
-  /**
-   * Updates active folder status.
-   */
-  imce.doUpdateStatus = function () {
-    var Folder = imce.activeFolder;
-    if (Folder) {
-      $(imce.contentStatusEl).html(Folder.formatStatus());
-    }
-  };
-
-
-  /**
-   * Returns name filtering regexp.
-   */
-  imce.getNameFilter = function () {
-    var filters = imce.getConf('name_filters', []);
-    // Dot files
-    if (!imce.getConf('allow_dot_files')) {
-      filters.push('^\\.|\\.$');
-    }
-    return filters.length ? new RegExp(filters.join('|')) : false;
-  };
-
-  /**
-   * Groups an array of items by parent folder and type.
-   */
-  imce.groupItems = function (items) {
-    var i;
-    var Item;
-    var path;
-    var selected;
-    var key;
-    var names;
-    var group = {};
-    for (i in items) {
-      if (!imce.owns(items, i)) {
-        continue;
-      }
-      Item = items[i];
-      path = Item.parent.getPath();
-      selected = group[path] = imce.owns(group, path) ? group[path] : {};
-      key = Item.isFolder ? 'subfolders' : 'files';
-      names = selected[key] = selected[key] || {};
-      names[Item.name] = Item;
-    }
-    return group;
-  };
-
-  /**
-   * Checks parent folder permissions of the given items.
-   */
-  imce.validatePermissions = function (items, filePerm, subfolderPerm) {
-    var path;
-    var Folder;
-    var selected;
-    var groups = imce.groupItems(items);
-    for (path in groups) {
-      if (!imce.owns(groups, path)) {
-        continue;
-      }
-      Folder = imce.getFolder(path);
-      selected = groups[path];
-      // Check file permission if the selection contains files
-      if (selected.files && (filePerm == null || !Folder.getPermission(filePerm))) {
-        return false;
-      }
-      // Check folder permission if the selection contains folders
-      if (selected.subfolders && (subfolderPerm == null || !Folder.getPermission(subfolderPerm))) {
-        return false;
-      }
-    }
-    return true;
-  };
-
-  /**
-   * Checks if items contain any predefined folder.
-   */
-  imce.validatePredefinedPath = function (items) {
-    var i;
-    var Item;
-    var Folder;
-    for (i in items) {
-      if (!imce.owns(items, i)) {
-        continue;
-      }
-      Item = items[i];
-      if (Item.isFolder) {
-        if (Folder = Item.hasPredefinedPath()) {
-          imce.setMessage(Drupal.t('%path is a predefined path and can not be modified.', {'%path': Folder.getPath()}));
-          return false;
-        }
-      }
-    }
-    return true;
-  };
-
-  /**
-   * Validates the number of items.
-   */
-  imce.validateCount = function (items) {
-    if (!items.length) {
-      imce.setMessage(Drupal.t('Please select a file.'));
-      return false;
-    }
-    return true;
-  };
-
-  /**
-   * Validates item extensions against an allowed list.
-   */
-  imce.validateExtensions = function (items, exts) {
-    for (var i in items) {
-      if (imce.owns(items, i) && !imce.validateExtension(items[i].ext, exts)) {
-        return false;
-      }
-    }
-    return true;
-  };
-
-  /**
-   * Validates an extension against an allowed list.
-   */
-  imce.validateExtension = function (ext, exts) {
-    if (!ext || $.inArray(ext.toLowerCase(), exts.toLowerCase().split(/[\s,]+/)) === -1) {
-      imce.setMessage(Drupal.t('Only files with the following extensions are allowed: %files-allowed.', {'%files-allowed': exts}));
-      return false;
-    }
-    return true;
-  };
-
-  /**
-   * Validates a file name.
-   */
-  imce.validateFileName = function (name) {
-    // Basic validation
-    if (!name || name === '.' || name === '..' || !name.length || name.length > 240) {
-      return false;
-    }
-    // Test name filters
-    var regex = imce.getNameFilter();
-    if (regex && regex.test(name)) {
-      imce.setMessage(Drupal.t('%filename is not allowed.', {'%filename': name}));
-      return false;
-    }
-    // Test chars forbidden in various operating systems.
-    if (/^\s|\s$|[\/\\:\*\?\x22<>\|\x00-\x1F]/.test(name)) {
-      imce.setMessage(Drupal.t('%filename contains invalid characters. Use only alphanumeric characters for better portability.', {'%filename': name}));
-      return false;
-    }
-    return true;
-  };
-
-  /**
-   * Validates min/max image dimensions.
-   */
-  imce.validateDimensions = function (items, width, height) {
-    // Check min dimensions
-    if (width < 1 || height < 1) {
-      return false;
-    }
-    // Check max dimensions.
-    var maxwidth = imce.getConf('maxwidth');
-    var maxheight = imce.getConf('maxheight');
-    if (maxwidth && width > maxwidth || maxheight && height > maxheight) {
-      imce.setMessage(Drupal.t('Image dimensions must be smaller than %dimensions pixels.', {'%dimensions': maxwidth + 'x' + maxwidth}));
-      return false;
-    }
-    return true;
-  };
-
-  /**
-   * Checks if all the selected items are images.
-   */
-  imce.validateImageTypes = function (items) {
-    var Item = imce.getFirstItem(items, 'width', false);
-    if (Item) {
-      imce.setMessage(Drupal.t('%name is not an image.', {'%name': Item.name}));
-      return false;
-    }
-    return true;
-  };
-
-
-  /**
-   * Keydown event for the file manager.
-   */
-  imce.eFmKeydown = function (event) {
-    return imce.eFireShortcut.call(this, event);
-  };
-
-  /**
-   * Refresh handler for the file manager.
-   */
-  imce.eFmRefresh = function () {
-    imce.activeFolder.load();
-  };
-
-  /**
-   * Mousedown event for folder tree.
-   */
-  imce.eTreeMousedown = function (event) {
-    // Manually focus as the browser default might have been prevented.
-    this.focus();
-  };
-
-  /**
-   * Touchstart event for folder tree.
-   */
-  imce.eTreeTouchstart = function (event) {
-    this.focus();
-  };
-
-  /**
-   * Keydown event for folder tree.
-   */
-  imce.eTreeKeydown = function (event) {
-    return imce.eFireShortcut.call(this, event, 'tree');
-  };
-
-  /**
-   * Tree shortcut: Enter.
-   */
-  imce.eTreeEnter = function () {
-    imce.activeFolder.open();
-  };
-
-  /**
-   * Tree shortcut: UP.
-   */
-  imce.eTreeUp = function (e) {
-    var Folder = imce.activeFolder;
-    var prvEl;
-    var prvFolder;
-    if (prvEl = Folder.branchEl.previousSibling) {
-      if (prvFolder = prvEl.Folder) {
-        while (prvFolder.expanded) {
-          if (prvEl = prvFolder.subtreeEl.lastChild) {
-            prvFolder = prvEl.Folder;
-          }
-        }
-      }
-    }
-    else {
-      prvFolder = Folder.parent;
-    }
-    if (prvFolder) {
-      prvFolder.activate();
-      imce.scrollToEl(prvFolder.branchEl, imce.treeEl);
-    }
-  };
-
-  /**
-   * Tree shortcut: DOWN.
-   */
-  imce.eTreeDown = function (e) {
-    var Folder = imce.activeFolder;
-    var nextEl;
-    var nextFolder;
-    if (Folder.expanded && (nextEl = Folder.subtreeEl.firstChild)) {
-      nextFolder = nextEl.Folder;
-    }
-    else {
-      // noinspection Eslint
-      do {
-        if (nextEl = Folder.branchEl.nextSibling) {
-          nextFolder = nextEl.Folder;
-          break;
-        }
-      } while (Folder = Folder.parent);
-    }
-    if (nextFolder) {
-      nextFolder.activate();
-      imce.scrollToEl(nextFolder.branchEl, imce.treeEl);
-    }
-  };
-
-  /**
-   * Tree shortcut: LEFT/RIGHT.
-   */
-  imce.eTreeLR = function (e) {
-    var Folder = imce.activeFolder;
-    if (e.keyCode === 39 ^ Folder.expanded) {
-      $(Folder.branchToggleEl).click();
-    }
-  };
-
-  /**
-   * Mousedown event for tree resizer.
-   */
-  imce.eTreeResizerMousedown = function (event) {
-    return imce.eTreeResizerDown.call(this, imce.eFix(event));
-  };
-
-  /**
-   * Touch start event for tree resizer.
-   */
-  imce.eTreeResizerTouchstart = function (event) {
-    return imce.eCommonTouchstart(event, imce.eTreeResizerDown, this);
-  };
-
-  /**
-   * Common Down event for tree resizer.
-   */
-  imce.eTreeResizerDown = function (e, isTouch) {
-    this.startX = e.pageX;
-    this.startW = $(imce.treeEl).width();
-    this.maxW = this.startW + $(imce.contentEl).width();
-    imce.bindDragDrop(imce.eTreeResizerDrag, null, null, isTouch);
-    return false;
-  };
-
-  /**
-   * Drag event for tree resizer.
-   */
-  imce.eTreeResizerDrag = function (e) {
-    var el = imce.treeResizerEl;
-    $(imce.treeEl).width(Math.min(el.maxW, Math.max(el.startW + e.pageX - el.startX, 0)));
-    e.preventDefault();
-  };
-
-  /**
-   * Mousedown event for content area.
-   */
-  imce.eContentMousedown = function (event) {
-    // Manually focus as the browser default might have been prevented.
-    this.focus();
-  };
-
-  /**
-   * Touchstart event for content area.
-   */
-  imce.eContentTouchstart = function (event) {
-    this.focus();
-  };
-
-  /**
-   * Keydown event for content area.
-   */
-  imce.eContentKeydown = function (event) {
-    return imce.eFireShortcut.call(this, event, 'content');
-  };
-
-  /**
-   * Scroll event for content area.
-   */
-  imce.eContentScroll = function (event) {
-    imce.updateContentPositions();
-    setTimeout(imce.updateContentPositions);
-  };
-
-  /**
-   * Click event for content header.
-   */
-  imce.eContentHeaderClick = function (event) {
-    var key;
-    var e = imce.eFix(event);
-    var Folder = imce.activeFolder;
-    var sort = Folder.activeSort || {};
-    if (key = e.target.getAttribute('data-sort')) {
-      Folder.sortItems(key, key === sort.key ? !sort.desc : sort.desc);
-    }
-  };
-
-  /**
-   * Update content header position on content scroll.
-   */
-  imce.updateContentPositions = function () {
-    var top = imce.contentEl.scrollTop;
-    imce.contentHeaderEl.style.top = top + 'px';
-    imce.contentStatusEl.style.bottom = -top + 'px';
-  };
-
-  /**
-   * Content shortcut: ENTER.
-   */
-  imce.eContentEnter = function (e) {
-    var Item = imce.getLastSelected();
-    if (Item) {
-      Item.dblClick();
-    }
-  };
-
-  /**
-   * Content shortcut: Ctrl+A.
-   */
-  imce.eContentCtrlA = function (e) {
-    imce.selectAll();
-  };
-
-  /**
-   * Content shortcut: LEFT/RIGHT/UP/DOWN
-   */
-  imce.eContentArrow = function (e) {
-    var Item;
-    var i = 0;
-    var Folder = imce.activeFolder;
-    var key = e.keyCode;
-    if (Item = imce.getLastSelected()) {
-      i = Folder.indexOf(Item) + (key % 2 ? key - 38 : imce.countElPerRow(Item.el) * (key - 39));
-    }
-    if (Item = Folder.getItemAt(i)) {
-      Item.click(e);
-      Item.scrollIntoView();
-    }
-  };
-
-  /**
-   * Mousedown event for body resizer.
-   */
-  imce.eBodyResizerMousedown = function (event) {
-    return imce.eBodyResizerDown.call(this, imce.eFix(event));
-  };
-
-  /**
-   * Touch start event for body resizer.
-   */
-  imce.eBodyResizerTouchstart = function (event) {
-    return imce.eCommonTouchstart(event, imce.eBodyResizerDown, this);
-  };
-
-  /**
-   * Common Down event for body resizer.
-   */
-  imce.eBodyResizerDown = function (e, isTouch) {
-    this.startY = e.pageY;
-    this.startH = $(imce.bodyEl).height();
-    this.maxH = this.startH + $(imce.previewEl).height();
-    imce.bindDragDrop(imce.eBodyResizerDrag, null, null, isTouch);
-    return false;
-  };
-
-  /**
-   * Drag event for body resizer.
-   */
-  imce.eBodyResizerDrag = function (e) {
-    var el = imce.bodyResizerEl;
-    var bodyH = Math.min(Math.max(el.startH + e.pageY - el.startY, 0), el.maxH);
-    $(imce.bodyEl).height(bodyH);
-    $(imce.previewEl).height(el.maxH - bodyH);
-    e.preventDefault();
-  };
-
-  /**
-   * Beforeunload event for window.
-   */
-  imce.eWinBeforeunload = function (e) {
-    // Store active sort.
-    var data = {};
-    if (data.activeSort = imce.activeSort) {
-      imce.trigger('storeLocalData', data);
-      try {
-        localStorage.setItem('imce.local', JSON.stringify(data));
-      }
-      catch (err) {
-        imce.delayError(err);
-      }
-    }
-  };
-
-  /**
-   * Resize event for window.
-   */
-  imce.eWinResize = function (e) {
-    var pdiff;
-    var diff = imce.getWindowSize().height - imce.fmEl.offsetHeight;
-    // Distribute the excess space to the body and preview elements.
-    if (diff) {
-      var $bodyEl = $(imce.bodyEl);
-      var $prvEl = $(imce.previewEl);
-      if ($prvEl[0].offsetHeight) {
-        pdiff = parseInt(diff / 2);
-        diff -= pdiff;
-        $prvEl.height($prvEl.height() + pdiff);
-      }
-      $bodyEl.height($bodyEl.height() + diff);
-    }
-  };
-
-
-  /**
-   * Binds an handler by type.
-   */
-  imce.bind = function (type, handler) {
-    var events = imce.events;
-    var handlers = events[type];
-    if (!handlers) {
-      handlers = events[type] = {};
-    }
-    handlers['' + handler] = handler;
-  };
-
-  /**
-   * Unbinds an handler by type.
-   */
-  imce.unbind = function (type, handler) {
-    var events = imce.events;
-    var handlers = events[type];
-    if (handlers) {
-      if (1 in arguments) {
-        delete handlers['' + handler];
-      }
-      else {
-        delete events[type];
-      }
-    }
-  };
-
-  /**
-   * Triggers handlers by type.
-   */
-  imce.trigger = function (type) {
-    var i;
-    var handler;
-    var handlers = imce.events[type];
-    var ret = [];
-    if (handlers) {
-      for (i in handlers) {
-        if (handler = handlers[i]) {
-          if (handler.apply) {
-            ret.push(handler.apply(imce, Array.prototype.slice.call(arguments, 1)));
-          }
-        }
-      }
-    }
-    return ret;
-  };
-
-
-  /**
-   * Adds a shortcut handler to an area.
-   */
-  imce.addShortcut = function (shortcut, handler, area) {
-    var shortcuts;
-    if (shortcuts = imce.getAreaShortcuts(area)) {
-      shortcuts[shortcut.toUpperCase()] = handler;
-    }
-  };
-
-  /**
-   * Returns a shortcut handler.
-   */
-  imce.getShortcut = function (shortcut, area) {
-    var shortcuts;
-    if (shortcuts = imce.getAreaShortcuts(area)) {
-      return shortcuts[shortcut.toUpperCase()];
-    }
-  };
-
-  /**
-   * Removes a shortcut handler.
-   */
-  imce.removeShortcut = function (shortcut, area) {
-    var shortcuts;
-    if (shortcuts = imce.getAreaShortcuts(area)) {
-      delete shortcuts[shortcut.toUpperCase()];
-    }
-  };
-
-  /**
-   * Executes a shortcut handler.
-   * Returns true if shortcut exists and is executed successfully.
-   */
-  imce.fireShortcut = function (shortcut, area) {
-    var handler = imce.getShortcut(shortcut, area);
-    if (handler) {
-      // DOM element
-      if (handler.click) {
-        handler.click();
-        return true;
-      }
-      // Callback
-      if (handler.apply) {
-        // Shortcuts returning false are considered disabled.
-        return handler.apply(this, Array.prototype.slice.call(arguments, 2)) !== false;
-      }
-    }
-  };
-
-  /**
-   * Returns a shortcut handler.
-   */
-  imce.getAreaShortcuts = function (area) {
-    if (!area) {
-      area = 'fm';
-    }
-    return imce.shortcuts[area];
-  };
-
-
-  /**
-   * Builds a shortcut string from an event.
-   */
-  imce.eBuildShortcut = function (e) {
-    var symbol;
-    var key = e.keyCode;
-    var shortcut = '';
-    if (key && (symbol = imce.getKeySymbols(key))) {
-      if (e.ctrlKey) {
-        shortcut += 'CTRL+';
-      }
-      if (e.altKey) {
-        shortcut += 'ALT+';
-      }
-      if (e.shiftKey) {
-        shortcut += 'SHIFT+';
-      }
-      shortcut += symbol;
-    }
-    return shortcut;
-  };
-
-  /**
-   * Event helper for imce shortcut firing.
-   */
-  imce.eFireShortcut = function (event, area) {
-    var e = event || window.event;
-    var shortcut = imce.eBuildShortcut(e);
-    // Prevent default if shortcut is executed.
-    if (shortcut) {
-      e = $.event.fix(e);
-      if (imce.fireShortcut.call(this, shortcut, area, e)) {
-        e.stopPropagation();
-        return false;
-      }
-    }
-  };
-
-  /**
-   * Returns key symbols allowed in shortcuts.
-   */
-  imce.getKeySymbols = function (key) {
-    var i;
-    var symbols = imce.keySymbols;
-    if (!symbols) {
-      // Custom keys
-      symbols = imce.keySymbols = {
-        8: 'BACKSPACE',
-        9: 'TAB',
-        13: 'ENTER',
-        27: 'ESC',
-        32: 'SPACE',
-        37: 'LEFT',
-        38: 'UP',
-        39: 'RIGHT',
-        40: 'DOWN',
-        46: 'DEL'
-      };
-      // Add numbers
-      for (i = 0; i < 10; i++) {
-        symbols[48 + i] = '' + i;
-      }
-      // Add letters
-      for (i = 65; i < 91; i++) {
-        symbols[i] = String.fromCharCode(i);
-      }
-      // Add function keys
-      for (i = 1; i < 13; i++) {
-        symbols[111 + i] = 'F' + i;
-      }
-    }
-    return (0 in arguments) ? symbols[key] : symbols;
-  };
-
-
-  /**
-   * Creates an ajax request for a specific operation.
-   */
-  imce.ajax = function (jsop, opt) {
-    return $.ajax(imce.ajaxPrepare(jsop, opt));
-  };
-
-  /**
-   * Prepares ajax options.
-   */
-  imce.ajaxPrepare = function (jsop, opt) {
-    // Prepare data
-    var path;
-    var Folder = opt && opt.activeFolder != null ? opt.activeFolder : imce.activeFolder;
-    var data = {jsop: jsop, token: imce.getConf('token')};
-    if (Folder) {
-      if (path = Folder.getPath()) {
-        data.active_path = path;
-      }
-    }
-    // Extend defaults
-    return $.extend(true, imce.ajaxDefaults(), {data: data, activeFolder: Folder}, opt);
-  };
-
-  /**
-   * Returns ajax default options.
-   */
-  imce.ajaxDefaults = function () {
-    return {
-      url: imce.getConf('ajax_url'),
-      type: 'POST',
-      dataType: 'json',
-      beforeSend: imce.ajaxBeforeSend,
-      success: imce.ajaxSuccess,
-      error: imce.ajaxError,
-      complete: imce.ajaxComplete
-    };
-  };
-
-  /**
-   * Creates an ajax request for a specific operation on the given items.
-   */
-  imce.ajaxItems = function (jsop, items, opt) {
-    return imce.ajax(jsop, $.extend(true, imce.ajaxItemsOpt(items), opt));
-  };
-
-  /**
-   * Creates an ajax options object including the items as the selection data.
-   */
-  imce.ajaxItemsOpt = function (items) {
-    return {data: {selection: imce.getItemPaths(items)}};
-  };
-
-  /**
-   * Default before send handler.
-   */
-  imce.ajaxBeforeSend = function (xhr, opt) {
-    var handler;
-    var Folder;
-    if (handler = opt.customBeforeSend) {
-      if (handler.apply(this, arguments) === false) {
-        opt.activeFolder = null;
-        return false;
-      }
-    }
-    if (Folder = opt.activeFolder) {
-      Folder.setBusy(true);
-    }
-  };
-
-  /**
-   * Default ajax success handler.
-   */
-  imce.ajaxSuccess = function (response, status) {
-    var handler;
-    var opt = this;
-    // Make the response available in complete handlers.
-    opt.response = response;
-    imce.ajaxProcessResponse(response);
-    if (handler = opt.customSuccess) {
-      handler.apply(opt, arguments);
-    }
-  };
-
-  /**
-   * Default ajax complete handler.
-   */
-  imce.ajaxComplete = function (xhr, status) {
-    var Folder;
-    var handler;
-    var opt = this;
-    if (Folder = opt.activeFolder) {
-      Folder.setBusy(false);
-    }
-    if (handler = opt.customComplete) {
-      handler.apply(opt, arguments);
-    }
-    opt.response = opt.activeFolder = null;
-  };
-
-  /**
-   * Default ajax error handler.
-   */
-  imce.ajaxError = function (xhr, status, e) {
-    imce.setMessage('<pre class="imce-ajax-error">' + Drupal.checkPlain(imce.ajaxErrorMessage(xhr, this.url)) + '</pre>');
-  };
-
-  /**
-   * Processes the ajax response.
-   */
-  imce.ajaxProcessResponse = function (response) {
-    if (response) {
-      imce.ajaxProcessRemoved(response);
-      imce.ajaxProcessAdded(response);
-      imce.ajaxProcessMessages(response);
-    }
-  };
-
-  /**
-   * Processes the added items in the response.
-   */
-  imce.ajaxProcessAdded = function (response) {
-    var path;
-    var Folder;
-    var added;
-    if (added = response.added) {
-      for (path in added) {
-        if (Folder = imce.addFolder(path)) {
-          Folder.addContent(added[path], true);
-          imce.contentEl.focus();
-        }
-      }
-    }
-  };
-
-  /**
-   * Processes the removed items in the response.
-   */
-  imce.ajaxProcessRemoved = function (response) {
-    var i;
-    var Item;
-    var paths = response.removed;
-    if (paths) {
-      for (i in paths) {
-        if (Item = imce.getItem(paths[i])) {
-          Item.remove();
-        }
-      }
-    }
-  };
-
-  /**
-   * Processes the messages in the response.
-   */
-  imce.ajaxProcessMessages = function (response) {
-    var i;
-    var type;
-    var msgs = response.messages;
-    if (msgs) {
-      for (type in msgs) {
-        if (imce.owns(msgs, type)) {
-          for (i in msgs[type]) {
-            if (msgs[type].hasOwnProperty(i)) {
-              imce.setMessage(msgs[type][i], type);
-            }
-          }
-        }
-      }
-    }
-  };
-
-  /**
-   * Generates an ajax error message.
-   */
-  imce.ajaxErrorMessage = function (xhr, url) {
-    var msg = Drupal.t('An AJAX HTTP error occurred.');
-    msg += '\n' + Drupal.t('Path: !uri', {'!uri': url});
-    msg += '\n' + Drupal.t('HTTP Result Code: !status', {'!status': xhr.status || 0});
-    msg += '\n' + Drupal.t('StatusText: !statusText', {'!statusText': xhr.statusText || 'N/A'});
-    msg += '\n' + Drupal.t('ResponseText: !responseText', {'!responseText': xhr.responseText || 'N/A'});
-    return msg;
-  };
-
-  /**
-   * Returns an array of item paths.
-   */
-  imce.getItemPaths = function (items) {
-    return $.map(items, imce.getItemPath);
-  };
-
-  /**
-   * Returns the path of an item.
-   */
-  imce.getItemPath = function (Item) {
-    return Item.getPath();
-  };
-
-
-  /**
-   * Set a status message.
-   */
-  imce.setMessage = function (msg, type) {
-    if (!type) {
-      type = 'error';
-    }
-    var mq = imce.messageQueue;
-    var len = mq.length;
-    var msgId = msg + ':' + type;
-    // Skip if it's identical to the last message
-    if (len && mq[len - 1].msgId === msgId) {
-      return false;
-    }
-    // Add the message
-    mq[len] = imce.createMessageEl(msg, type);
-    mq[len].msgId = msgId;
-    // Schedule the processing at a later time to queue new messages.
-    if (!imce.pmqScheduled) {
-      imce.pmqScheduled = setTimeout(imce.processMessageQueue, 100);
-    }
-    return false;
-  };
-
-  /**
-   * Process message queue.
-   */
-  imce.processMessageQueue = function () {
-    var mq = imce.messageQueue;
-    if (mq.length) {
-      // Display all messages
-      $(imce.createMessagePopupEl()).html(mq).fadeIn(200);
-      // Empty array.
-      mq.length = 0;
-      // Mousedown close
-      $(document).bind('mousedown', imce.eMPopDocMousedown);
-      // Auto close
-      imce.mPopCloseTimer = setTimeout(imce.mPopClose, 2500);
-    }
-  };
-
-  /**
-   * Closes currently open message popup.
-   */
-  imce.mPopClose = function () {
-    // Time up but still hovering. Do not close. A new timer will be set on mouseout.
-    if (imce.mPopHovering) {
-      imce.mPopCloseTimerUp = 1;
-      return imce.mPopCloseTimerUp;
-    }
-    // Time up or mousedown
-    clearTimeout(imce.mPopCloseTimer);
-    imce.mPopCloseTimerUp = 0;
-    $(document).unbind('mousedown', imce.eMPopDocMousedown);
-    $(imce.messagePopupEl).fadeOut(400, imce.processMessageQueueNext);
-  };
-
-  /**
-   * Continue processing the remaining messages.
-   */
-  imce.processMessageQueueNext = function () {
-    imce.pmqScheduled = 0;
-    if (imce.messageQueue.length) {
-      imce.pmqScheduled = setTimeout(imce.processMessageQueue, 250);
-    }
-  };
-
-  /**
-   * Mouseover event for message popup.
-   */
-  imce.eMPopMouseenter = function (e) {
-    imce.mPopHovering = 1;
-    // Clear the shorter timer set on mouseleave
-    if (imce.mPopCloseTimerUp) {
-      clearTimeout(imce.mPopCloseTimer);
-    }
-  };
-
-  /**
-   * Mouseout event for message popup.
-   */
-  imce.eMPopMouseleave = function (e) {
-    imce.mPopHovering = 0;
-    // Set a shorter close timer if the long time is up
-    if (imce.mPopCloseTimerUp) {
-      imce.mPopCloseTimer = setTimeout(imce.mPopClose, 2000);
-    }
-  };
-
-  /**
-   * Mousedown event for document in order to close message popup.
-   */
-  imce.eMPopDocMousedown = function (e) {
-    // Close the popup if the mousedown is outside of it.
-    if (!imce.mPopHovering) {
-      imce.mPopClose();
-    }
-  };
-
-  /**
-   * Creates a message element.
-   */
-  imce.createMessageEl = function (msg, type) {
-    var el = imce.createEl('<div class="imce-message imce-ficon"><div class="imce-message-content"></div></div>');
-    el.className += ' ' + type;
-    el.firstChild.innerHTML = msg;
-    return el;
-  };
-
-  /**
-   * Creates the message popup element.
-   */
-  imce.createMessagePopupEl = function () {
-    var el = imce.messagePopupEl;
-    if (!el) {
-      el = imce.messagePopupEl = imce.createLayer('imce-message-popup', imce.fmEl);
-      $(el).hover(imce.eMPopMouseenter, imce.eMPopMouseleave);
-    }
-    return el;
-  };
-
-
-  /**
-   * Checks a permission in a folder conf.
-   */
-  imce.permissionInFolderConf = function (permission, folderConf) {
-    var permissions = folderConf && folderConf.permissions;
-    return !!(permissions && ((permission in permissions) ? permissions[permission] : permissions.all));
-  };
-
-  /**
-   * Checks if a permission exists in any of the predefined folders.
-   */
-  imce.hasPermission = function (permission, conf) {
-    var i;
-    var folders = (conf || imce.conf).folders;
-    if (folders) {
-      for (i in folders) {
-        if (imce.permissionInFolderConf(permission, folders[i])) {
-          return true;
-        }
-      }
-    }
-    return false;
-  };
-
-  /**
-   * Sorting helpers.
-   */
-  imce.sortText = function (a, b) {
-    return a.toLowerCase() < b.toLowerCase() ? -1 : 1;
-  };
-  imce.sortNum = function (a, b) {
-    return (a || 0) - (b || 0);
-  };
-  imce.sortNumericProperty = function (a, b, prop) {
-    // Do not change sort within folders
-    var result = (a.isFolder ? -1 : 1);
-    if (a.isFolder === b.isFolder) {
-      result = imce.sortNum(a[prop] || 0, b[prop] || 0);
-    }
-    return result;
-  };
-  imce.sortBranchName = function (a, b) {
-    return imce.sortText(a.name, b.name);
-  };
-
-  /**
-   * Property sorters.
-   */
-  imce.sorters.name = function (a, b) {
-    var result = (a.isFolder ? -1 : 1);
-    if (a.isFolder === b.isFolder) {
-      result = imce.sortText(a.name, b.name);
-    }
-    return result;
-  };
-  imce.sorters.date = function (a, b) {
-    return imce.sortNumericProperty(a, b, 'date');
-  };
-  imce.sorters.size = function (a, b) {
-    return imce.sortNumericProperty(a, b, 'size');
-  };
-  imce.sorters.width = function (a, b) {
-    return imce.sortNumericProperty(a, b, 'width');
-  };
-  imce.sorters.height = function (a, b) {
-    return imce.sortNumericProperty(a, b, 'height');
-  };
-  imce.sorters.ext = function (a, b) {
-    var result = (a.isFolder ? -1 : 1);
-    if (a.isFolder === b.isFolder) {
-      result = (a.isFolder ? 0 : imce.sortText(a.ext || '', b.ext || ''));
-    }
-    return result;
-  };
-
-  /**
-   * Splits a path into dirpath and filename.
-   */
-  imce.splitPath = function (path) {
-    if (typeof path === 'string' && path !== '') {
-      var parts = path.split('/');
-      var filename = parts.pop();
-      var dirpath = parts.join('/');
-      if (filename !== '') {
-        return [dirpath === '' ? '.' : dirpath, filename];
-      }
-    }
-  };
-
-  /**
-   * Creates a file path by joining a folder path and a filename.
-   */
-  imce.joinPaths = function (dirpath, filename) {
-    if (dirpath === '.') {
-      return filename;
-    }
-    if (filename === '.') {
-      return dirpath;
-    }
-    if (dirpath.substr(-1) !== '/') {
-      dirpath += '/';
-    }
-    return dirpath + filename;
-  };
-
-  /**
-   * Returns query parameters from the current URL.
-   */
-  imce.getQuery = function (name) {
-    var i;
-    var part;
-    var parts;
-    var str;
-    var query = imce.query;
-    if (!query) {
-      query = imce.query = {};
-      if (str = location.search) {
-        parts = str.substr(1).split('&');
-        for (i in parts) {
-          if (imce.owns(parts, i)) {
-            part = parts[i].split('=');
-            query[imce.decode(part[0])] = part[1] ? imce.decode(part[1]) : '';
-          }
-        }
-      }
-    }
-    return name ? query[name] : query;
-  };
-
-  /**
-   * Wrapper around decodeURIComponent.
-   * Avoids malformed uri exception.
-   */
-  imce.decode = function (str) {
-    try {
-      str = decodeURIComponent(str);
-    }
-    catch (err) {
-      imce.delayError(err);
-    }
-    return str;
-  };
-
-  /**
-   * Throws an error after a minimum delay.
-   */
-  imce.delayError = function (err) {
-    setTimeout(function () {
-      throw err;
-    });
-  };
-
-  /**
-   * Formats item date.
-   */
-  imce.formatDate = function (timestamp, dayOnly) {
-    var D;
-    var p0;
-    var ret = '';
-    if (timestamp) {
-      D = new Date(timestamp * 1000);
-      p0 = imce.prependZero;
-      ret = D.getFullYear() + '-' + p0(D.getMonth() + 1) + '-' + p0(D.getDate());
-      if (!dayOnly) {
-        ret += ' ' + p0(D.getHours()) + ':' + p0(D.getMinutes());
-      }
-    }
-    return ret;
-  };
-
-  /**
-   * Formats item size.
-   */
-  imce.formatSize = function (size) {
-    if (size == null) {
-      return '';
-    }
-    if (!size || size < 100) {
-      return Drupal.formatPlural(size, '1 byte', '@count bytes', {'@count': size || 0});
-    }
-    if (size < 1048576) {
-      return Drupal.t('@size KB', {'@size': imce.round(size / 1024, 1)});
-    }
-    return Drupal.t('@size MB', {'@size': imce.round(size / 1048576, 1)});
-  };
-
-  /**
-   * Formats content items status.
-   */
-  imce.formatItemsStatus = function (count, size) {
-    return Drupal.t('!items (!size)', {
-      '!items': Drupal.formatPlural(count, '1 item', '@count items'),
-      '!size': imce.formatSize(size)
-    });
-  };
-
-  /**
-   * Prepends 0 to numbers smaller than 10.
-   */
-  imce.prependZero = function (num) {
-    return num < 10 ? '0' + num : num;
-  };
-
-  /**
-   * Rounds a number to the given precision
-   */
-  imce.round = function (num, precision) {
-    var n = Math.pow(10, precision);
-    return Math.round(num * n) / n;
-  };
-
-  /**
-   * Returns the extension of a file name.
-   */
-  imce.getExt = function (name) {
-    var pos = name.lastIndexOf('.');
-    return pos === -1 ? '' : name.substr(pos + 1);
-  };
-
-  /**
-   * Checks if an object owns a property.
-   */
-  imce.owns = function (object, property) {
-    return Object.prototype.hasOwnProperty.call(object, property);
-  };
-
-  /**
-   * Returns the first item that has a property.
-   */
-  imce.getFirstItem = function (items, prop, state) {
-    var i;
-    var item;
-    if (typeof state === "undefined") {
-      state = true;
-    }
-    for (i in items) {
-      if (imce.owns(items, i)) {
-        item = items[i];
-        if (!prop || (item[prop] ? state : !state)) {
-          return item;
-        }
-      }
-    }
-  };
-
-  /**
-   * Resolves a string to a handler under the given scope.
-   */
-  imce.resolveHandler = function (str, scope) {
-    if (!str) {
-      return;
-    }
-    var i;
-    var obj = scope || window;
-    var parts = str.split('.');
-    var len = parts.length;
-    for (i = 0; i < len && (obj = obj[parts[i]]); i++) {
-      // empty
-    }
-    return i === len && obj && obj.call && obj.apply ? obj : false;
-  };
-
-  /**
-   * Creates a DOM element from html string.
-   */
-  imce.createEl = function (html) {
-    var el;
-    var div = imce._div;
-    if (!div) {
-      div = imce._div = document.createElement('div');
-    }
-    div.innerHTML = html;
-    el = div.firstChild;
-    div.removeChild(el);
-    return el;
-  };
-
-  /**
-   * Creates a layer element.
-   */
-  imce.createLayer = function (cname, parent) {
-    var layer = imce.createEl('<div class="imce-layer"></div>');
-    if (cname) {
-      layer.className += ' ' + cname;
-    }
-    if (parent !== false) {
-      (parent || document.body).appendChild(layer);
-    }
-    return layer;
-  };
-
-  /**
-   * Removes element without removing events.
-   */
-  imce.removeEl = function (el) {
-    var parent = el.parentNode;
-    if (parent) {
-      parent.removeChild(el);
-    }
-  };
-
-  /**
-   * Returns window inner size.
-   */
-  imce.getWindowSize = function () {
-    return {
-      width: window.innerWidth || document.documentElement.clientWidth,
-      height: window.innerHeight || document.documentElement.clientHeight
-    };
-  };
-
-  /**
-   * Returns scroll values of the window.
-   */
-  imce.getWindowScroll = function () {
-    if (typeof window.pageXOffset === "undefined") {
-      var el = document.documentElement;
-      return {left: el.scrollLeft, top: el.scrollTop};
-    }
-    return {left: window.pageXOffset, top: window.pageYOffset};
-  };
-
-  /**
-   * Fixes and converts an event into jQuery event.
-   */
-  imce.eFix = function (event) {
-    return $.event.fix(event || window.event);
-  };
-
-  /**
-   * Scroll an element into view inside the scrollable wrapper.
-   */
-  imce.scrollToEl = function (el, wrpEl, diffTop, diffBottom) {
-    if (el.offsetWidth && wrpEl.scrollHeight > wrpEl.clientHeight) {
-      var elTop = $(el).offset().top;
-      var elBottom = elTop + el.offsetHeight;
-      var wrpTop = $(wrpEl).offset().top;
-      var wrpBottom = wrpTop + wrpEl.offsetHeight;
-      wrpTop += diffTop || 0;
-      wrpBottom -= diffBottom || 0;
-      // Check top positions
-      if (elTop < wrpTop) {
-        wrpEl.scrollTop -= wrpTop - elTop + 10;
-      }
-      else if (wrpBottom < elBottom) {
-        // Consider el height might be bigger than the wrapper height.
-        // Get the minimum among top space and required scroll.
-        wrpEl.scrollTop += Math.min(elBottom - wrpBottom + 10, elTop - wrpTop - 10);
-      }
-    }
-  };
-
-  /**
-   * Returns number of the elements that can fit in a row inside the parent.
-   */
-  imce.countElPerRow = function (el) {
-    return Math.max(1, parseInt(el.parentNode.clientWidth / $(el).outerWidth(true)));
-  };
-
-  /**
-   * Makes the element stay inside window boundaries.
-   */
-  imce.fixPosition = function (el) {
-    var pos = $(el).offset();
-    var winSize = imce.getWindowSize();
-    var winScroll = imce.getWindowScroll();
-    var scrollbar = 18;
-    var extraX = pos.left - winScroll.left + el.offsetWidth - winSize.width + scrollbar;
-    var extraY = pos.top - winScroll.top + el.offsetHeight - winSize.height + scrollbar;
-    // Shift to left
-    if (extraX > 0) {
-      el.style.left = Math.max(0, pos.left - extraX) + 'px';
-    }
-    // Shift to top
-    if (extraY > 0) {
-      el.style.top = Math.max(0, pos.top - extraY) + 'px';
-    }
-  };
-
-
-  /**
-   * Bind drag drop callbacks to the document
-   */
-  imce.bindDragDrop = function (drag, drop, data, isTouch) {
-    var edata = {drag: drag, drop: drop, data: data, isTouch: isTouch};
-    $(document).bind(isTouch ? 'touchmove' : 'mousemove', edata, imce.eDocDrag).bind(isTouch ? 'touchend' : 'mouseup', edata, imce.eDocDrop);
-  };
-
-  /**
-   * Default drag event for document which is set by imce.bindDragDrop
-   */
-  imce.eDocDrag = function (e) {
-    var edata = e.data;
-    // Call custom drag event if set.
-    if (edata.drag) {
-      // Fix touch event
-      if (edata.isTouch) {
-        e = imce.eTouchFix(e, e.originalEvent.changedTouches[0]);
-      }
-      return edata.drag.call(this, e);
-    }
-  };
-
-  /**
-   * Default drop event for document which is set by imce.bindDragDrop
-   */
-  imce.eDocDrop = function (e) {
-    var edata = e.data;
-    $(document).unbind(edata.isTouch ? 'touchmove' : 'mousemove', imce.eDocDrag).unbind(edata.isTouch ? 'touchend' : 'mouseup', imce.eDocDrop);
-    // Call custom drop event if set.
-    if (edata.drop) {
-      // Fix touch event
-      if (edata.isTouch) {
-        e = imce.eTouchFix(e, e.originalEvent.changedTouches[0]);
-      }
-      return edata.drop.call(this, e);
-    }
-  };
-
-  /**
-   * Fix touch events
-   */
-  imce.eTouchFix = function (e, touch) {
-    // Make sure e is a jquery event object that is writable.
-    e = $.event.fix(e);
-    if (touch && typeof touch.pageX !== "undefined") {
-      e.pageX = touch.pageX;
-      e.pageY = touch.pageY;
-      e.clientX = touch.clientX;
-      e.clientY = touch.clientY;
-    }
-    return e;
-  };
-
-  /**
-   * Common touchstart event.
-   */
-  imce.eCommonTouchstart = function (event, callback, context) {
-    var touch;
-    var touches = event.changedTouches;
-    // Skip event for multi-touch
-    if (touches && (touch = touches[0]) && !touches[1]) {
-      if (callback && callback.call) {
-        return callback.call(context || this, imce.eTouchFix(event, touch), true);
-      }
-      // Prevent default.
-      return false;
-    }
-  };
-
-})(jQuery, Drupal);
diff --git a/web/modules/imce/js/plugins/bueditor/imce.bueditor.js b/web/modules/imce/js/plugins/bueditor/imce.bueditor.js
deleted file mode 100644
index e9d9ede0d97a791c0f4cf38b3a5369bf0209f42f..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/bueditor/imce.bueditor.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*global BUE:true*/
-(function ($, Drupal, BUE) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines Imce plugin for BUEditor.
-   */
-
-  /**
-   * File browser handler for image/link dialogs.
-   */
-  BUE.fileBrowsers.imce = function (field, type, E) {
-    var width = Math.min(1000, parseInt(screen.availWidth * 0.8));
-    var height = Math.min(800, parseInt(screen.availHeight * 0.8));
-    var field_id = BUE.imce.fields.length;
-    var url = BUE.imce.url('sendto=BUE.imce.sendtoField&type=' + type + '&field_id=' + field_id);
-    BUE.imce.fields[field_id] = field;
-    window.open(url, '', 'width=' + width + ',height=' + height + ',resizable=1');
-  };
-
-  /**
-   * Global container for helper methods.
-   */
-  BUE.imce = BUE.imce || {
-
-    /**
-     * Active form fields currently using the file browser.
-     */
-    fields: [],
-
-    /**
-     * Imce sendto handler for inserting a file url into a form field.
-     */
-    sendtoField: function (File, win) {
-      var field;
-      var id = win.imce.getQuery('field_id');
-      if (field = BUE.imce.fields[id]) {
-        // Set field value
-        field.value = File.getUrl();
-        // Check other fields
-        var name;
-        var input;
-        var value;
-        var values = {width: File.width, height: File.height, alt: File.formatName()};
-        for (name in values) {
-          if (value = values[name]) {
-            if (input = field.form.elements[name]) {
-              input.value = value;
-            }
-          }
-        }
-        field.focus();
-        BUE.imce.fields[id] = null;
-      }
-      win.close();
-    },
-
-    /**
-     * Returns imce url.
-     */
-    url: function (query) {
-      var url = Drupal.url('imce');
-      if (query) {
-        url += (url.indexOf('?') === -1 ? '?' : '&') + query;
-      }
-      return url;
-    }
-
-  };
-
-})(jQuery, Drupal, BUE);
diff --git a/web/modules/imce/js/plugins/ckeditor/icons/imceimage.png b/web/modules/imce/js/plugins/ckeditor/icons/imceimage.png
deleted file mode 100644
index b175a777722b03822dbca3c7372970210a57bd47..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/ckeditor/icons/imceimage.png
+++ /dev/null
@@ -1,4 +0,0 @@
-�PNG
-
-���
IHDR�����������a����IDATx�c`$��?y
-L��wR0���..�@A���@�D���0����������!�����K�Z� �$��$���J�~,��/�1�O,�33+��� doc������H�B������#�����geU�2%��U)��r�$�6�EZZ~�A��1��
 ���I����h��A��� C@��A��b��"�(	a�:�@�%M� 1fHI��d��p��AzZ1ѴOu����IEND�B`�
\ No newline at end of file
diff --git a/web/modules/imce/js/plugins/ckeditor/icons/imcelink.png b/web/modules/imce/js/plugins/ckeditor/icons/imcelink.png
deleted file mode 100644
index 3ce6bb9bb4b92920504fbb3b402a7bbf773b14eb..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/ckeditor/icons/imcelink.png
+++ /dev/null
@@ -1,5 +0,0 @@
-�PNG
-
-���
IHDR�����������a����IDATx^�1
-1DS�9�Xx�A�Bl��SX)zI�,��G�Fl=���*��~�����cavf>D��ĊpDlA�9dS��6����.Idё.�pTjdQ(����\��뽿���Y9� fZOS�DUM���j�́�+-�/��"�4˽b��6�\�*����L������
��k;�y�'���c
-�/��,�T�8�����IEND�B`�
\ No newline at end of file
diff --git a/web/modules/imce/js/plugins/ckeditor/imce.ckeditor.js b/web/modules/imce/js/plugins/ckeditor/imce.ckeditor.js
deleted file mode 100644
index 8071d2e87ca08b7c681956ad282ebc0ced8a8e9a..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/ckeditor/imce.ckeditor.js
+++ /dev/null
@@ -1,136 +0,0 @@
-(function ($, Drupal, CKEDITOR) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines Imce plugin for CKEditor.
-   */
-
-  CKEDITOR.plugins.add('imce', {
-    // Define commands and buttons
-    init: function (editor) {
-      // Image
-      editor.addCommand('imceimage', {
-        exec: CKEDITOR.imce.imageDialog
-      });
-      editor.ui.addButton('ImceImage', {
-        label: CKEDITOR.imce.imageLabel(),
-        command: 'imceimage',
-        icon: editor.config.ImceImageIcon
-      });
-      // Link
-      editor.addCommand('imcelink', {
-        exec: CKEDITOR.imce.linkDialog
-      });
-      editor.ui.addButton('ImceLink', {
-        label: CKEDITOR.imce.linkLabel(),
-        command: 'imcelink',
-        icon: editor.config.ImceLinkIcon
-      });
-    }
-  });
-
-  /**
-   * Global container for helper methods.
-   */
-  CKEDITOR.imce = CKEDITOR.imce || {
-
-    /**
-     * Returns image button label.
-     */
-    imageLabel: function () {
-      return Drupal.t('Insert images using Imce File Manager');
-    },
-
-    /**
-     * Opens Imce for inserting images into CKEditor.
-     */
-    imageDialog: function (editor) {
-      return CKEDITOR.imce.openDialog(editor, 'image');
-    },
-
-    /**
-     * Returns link button label.
-     */
-    linkLabel: function () {
-      return Drupal.t('Insert file links using Imce File Manager');
-    },
-
-    /**
-     * Opens Imce for inserting links into CKEditor.
-     */
-    linkDialog: function (editor) {
-      return CKEDITOR.imce.openDialog(editor, 'link');
-    },
-
-    /**
-     * Opens Imce for inserting images or links into CKEditor.
-     */
-    openDialog: function (editor, type) {
-      var width = Math.min(1000, parseInt(screen.availWidth * 0.8));
-      var height = Math.min(800, parseInt(screen.availHeight * 0.8));
-      var url = CKEDITOR.imce.url('sendto=CKEDITOR.imce.sendto&type=' + type + '&ck_id=' + encodeURIComponent(editor.name));
-      editor.popup(url, width, height);
-    },
-
-    /**
-     * Imce sendto handler for image/link dialog.
-     */
-    sendto: function (File, win) {
-      var imce = win.imce;
-      var editor = CKEDITOR.instances[imce.getQuery('ck_id')];
-      if (editor) {
-        var i;
-        var text;
-        var lines = [];
-        var selection = imce.getSelection();
-        var is_img = imce.getQuery('type') === 'image';
-        for (i in selection) {
-          if (!imce.owns(selection, i)) {
-            continue;
-          }
-          File = selection[i];
-          // Image
-          if (is_img && File.isImageSource()) {
-            lines.push('<img src="' + File.getUrl() + '"' + (File.width ? ' width="' + File.width + '"' : '') + (File.height ? ' height="' + File.height + '"' : '') + ' alt="' + File.formatName() + '" />');
-          }
-          // Link
-          else {
-            // Use the selected text/image for the first link
-            text = !lines.length && CKEDITOR.imce.getSelectedHtml(editor) || File.formatName();
-            lines.push('<a href="' + File.getUrl() + '">' + text + '</a>');
-          }
-        }
-        editor.insertHtml(lines.join('<br />'));
-      }
-      win.close();
-    },
-
-    /**
-     * Returns Imce url.
-     */
-    url: function (query) {
-      var url = Drupal.url('imce');
-      if (query) {
-        url += (url.indexOf('?') === -1 ? '?' : '&') + query;
-      }
-      return url;
-    },
-
-    /**
-     * Returns the selection source from the editor.
-     */
-    getSelectedHtml: function (editor) {
-      var html = '';
-      try {
-        var range = editor.getSelection().getRanges()[0];
-        var div = editor.document.createElement('div');
-        div.append(range.cloneContents());
-        html = div.getHtml();
-      } catch(err) {}
-      return html;
-    }
- 
-  };
-
-})(jQuery, Drupal, CKEDITOR);
diff --git a/web/modules/imce/js/plugins/imce/imce.UploadQueue.js b/web/modules/imce/js/plugins/imce/imce.UploadQueue.js
deleted file mode 100644
index 17b89e21bf1cfd6f04d5a3fa5b53f44599878356..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/imce/imce.UploadQueue.js
+++ /dev/null
@@ -1,396 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines imce Upload Queue and Upload Queue Item.
-   */
-
-  /**
-   * Upload queue constructor.
-   */
-  imce.UploadQueue = function (conf) {
-    this.construct(conf);
-  };
-
-  /**
-   * Upload queue prototype.
-   */
-  var Uq = imce.UploadQueue.prototype;
-
-  /**
-   * Constructs upload queue.
-   */
-  Uq.construct = function (conf) {
-    var Uq = this;
-    Uq.items = {};
-    Uq.queue = [];
-    Uq.conf = $.extend({name: 'files[imce][]'}, conf);
-    Uq.createEl();
-  };
-
-  /**
-   * Creates upload queue element.
-   */
-  Uq.createEl = function () {
-    var Uq = this;
-    var el = Uq.el;
-    var inputEl;
-    var accept;
-    if (!el) {
-      el = Uq.el = imce.createEl('<div class="imce-uq"><span class="imce-uq-button imce-ficon imce-ficon-plus"><span class="imce-uq-label">' + Drupal.t('Add file') + '</span><input type="file" class="imce-uq-input" multiple /></span><div class="imce-uq-items"></div></div>');
-      inputEl = Uq.inputEl = el.firstChild.lastChild;
-      inputEl.onchange = imce.eUqInputChange;
-      if (accept = Uq.conf.accept) {
-        inputEl.accept = accept;
-      }
-      Uq.itemsEl = el.lastChild;
-      el.Uq = inputEl.Uq = Uq;
-    }
-    return el;
-  };
-
-  /**
-   * Starts the queue.
-   */
-  Uq.start = function () {
-    var Uq = this;
-    if (!Uq.running && Uq.queue.length) {
-      if (Uq.next()) {
-        Uq.running = true;
-        imce.uploadSetBusy(true);
-      }
-    }
-    return Uq.running;
-  };
-
-  /**
-   * Ends the queue.
-   */
-  Uq.end = function () {
-    if (this.running) {
-      this.running = false;
-      imce.uploadSetBusy(false);
-      imce.getTbb('upload').closePopup();
-    }
-  };
-
-  /**
-   * Process the first available item in the queue.
-   */
-  Uq.next = function () {
-    var i;
-    var Item;
-    var queue = this.queue.slice(0);
-    for (i = 0; Item = queue[i]; i++) {
-      // Remove completed items from the queue.
-      if (Item.completed) {
-        Item.remove();
-      }
-      else if (Item.start()) {
-        return Item;
-      }
-    }
-    // No items left. End the queue if running.
-    this.end();
-  };
-
-  /**
-   * Select files from a file reference list.
-   */
-  Uq.selectFiles = function (list) {
-    var i;
-    var file;
-    var Item;
-    var ret;
-    var path = imce.activeFolder.getPath();
-    for (i = 0; file = list[i]; i++) {
-      if (imce.validateFileUpload(file)) {
-        Item = new imce.UploadQueueItem(file, path);
-        if (this.addItem(Item)) {
-          if (!ret) {
-            ret = {};
-          }
-          ret[i] = Item.id;
-        }
-        else {
-          Item.remove();
-        }
-      }
-    }
-    return ret;
-  };
-
-  /**
-   * Returns a queue item.
-   */
-  Uq.getItem = function (id) {
-    return this.items[id];
-  };
-
-  /**
-   * Adds a queue item.
-   */
-  Uq.addItem = function (Item) {
-    var existing;
-    var Uq = this;
-    var id = Item.id;
-    // Check existing
-    if (existing = Uq.getItem(id)) {
-      existing.remove(true);
-    }
-    Item.Uq = Uq;
-    Uq.items[id] = Uq.queue[Uq.queue.length] = Item;
-    Uq.itemsEl.appendChild(Item.el);
-    return Item;
-  };
-
-  /**
-   * Removes a queue item.
-   */
-  Uq.removeItem = function (Item, quick) {
-    var Uq = this;
-    var queue = Uq.queue;
-    var i = $.inArray(Item, queue);
-    if (i !== -1) {
-      queue.splice(i, 1);
-      delete Uq.items[Item.id];
-      if (quick) {
-        $(Item.el).remove();
-      }
-      else {
-        $(Item.el).fadeOut(1000, imce.eUqItemFadeout);
-      }
-      return Item;
-    }
-  };
-
-  /**
-   * Prepare ajax options for an item.
-   */
-  Uq.ajaxPrepare = function (Item) {
-    var i;
-    var field;
-    var data;
-    var formData;
-    var Folder;
-    var Uq = this;
-    var file = Item.file;
-    var dest = Item.destination;
-    // Check file and destination
-    if (!file || !dest || !(Folder = imce.getFolder(dest))) {
-      return;
-    }
-    // Prepare form data
-    data = $(Uq.inputEl.form).serializeArray().concat([{name: 'active_path', value: dest}], Item.formData || []);
-    formData = new FormData();
-    for (i = 0; field = data[i]; i++) {
-      if (field.name) {
-        formData.append(field.name, field.value);
-      }
-    }
-    formData.append(Uq.conf.name, Item.file);
-    // Extend default ajax options
-    return $.extend(imce.ajaxDefaults(), {
-      data: formData,
-      processData: false,
-      contentType: false,
-      custombeforeSend: imce.xUqItemBeforeSend,
-      customComplete: imce.xUqItemComplete,
-      itemId: Item.id,
-      activeFolder: Folder
-    });
-  };
-
-
-  /**
-   * Upload queue item constructor.
-   */
-  imce.UploadQueueItem = function (file, destination) {
-    this.construct(file, destination);
-  };
-
-  /**
-   * Upload queue item prototype.
-   */
-  var UqItem = imce.UploadQueueItem.prototype;
-
-  /**
-   * Constructs upload queue item.
-   */
-  UqItem.construct = function (file, destination) {
-    this.file = file;
-    this.destination = destination;
-    this.id = imce.joinPaths(destination, file.name);
-    this.createEl();
-  };
-
-  /**
-   * Creates upload queue element.
-   */
-  UqItem.createEl = function () {
-    var cancelEl;
-    var name;
-    var Item = this;
-    var el = Item.el;
-    var file = Item.file;
-    if (!el) {
-      name = Drupal.checkPlain(file.name);
-      el = Item.el = imce.createEl('<div class="imce-uqi"><div class="imce-uqi-cancel"></div><div class="imce-uqi-info"><span class="imce-uqi-name" title="' + name + '">' + name + '</span><span class="imce-uqi-size">' + imce.formatSize(file.size) + '</span></div><div class="imce-uqi-progress"><div class="imce-uqi-bar"></div></div><div class="imce-uqi-percent">' + Drupal.t('!percent%', {'!percent': 0}) + '</div></div>');
-      el.Item = Item;
-      // Set cancel element events
-      cancelEl = el.firstChild;
-      cancelEl.onclick = imce.eUqItemCancelClick;
-      cancelEl.onmousedown = imce.eUqItemCancelMousedown;
-    }
-    return el;
-  };
-
-  /**
-   * Removes the item from queue.
-   */
-  UqItem.remove = function (quick) {
-    var ret;
-    var Item = this;
-    var Uq = Item.Uq;
-    Item.stop();
-    if (Uq) {
-      Uq.removeItem(Item, quick);
-    }
-    Item.Uq = Item.xhr = Item.file = Item.formData = Item.el.Item = null;
-    return ret;
-  };
-
-  /**
-   * Start processing the item.
-   */
-  UqItem.start = function () {
-    var opt;
-    var Item = this;
-    var Uq = Item.Uq;
-    if (Uq && !Item.active && !Item.completed) {
-      // Get ajax options
-      if (opt = Uq.ajaxPrepare(Item)) {
-        Item.active = true;
-        $(Item.el).addClass('active');
-        Item.xhr = $.ajax(opt);
-        Uq.activeItem = Item;
-        return Uq.activeItem;
-      }
-    }
-  };
-
-  /**
-   * Stops processing the item.
-   */
-  UqItem.stop = function () {
-    var Item = this;
-    if (Item.active) {
-      Item.active = false;
-      $(Item.el).removeClass('active');
-      if (Item.xhr) {
-        Item.xhr.abort();
-      }
-      // Make sure the item is completed
-      Item.complete();
-    }
-  };
-
-  /**
-   * Sets the item as completed.
-   */
-  UqItem.complete = function (status) {
-    var Item = this;
-    var Uq = Item.Uq;
-    if (!Item.completed) {
-      Item.completed = true;
-      Item.status = status;
-      $(Item.el).addClass(status ? 'success' : 'fail');
-      if (status) {
-        $('.imce-uqi-percent', Item.el).html(Drupal.t('!percent%', {'!percent': 100}));
-      }
-      // Check if this is the active item of the queue
-      if (Uq && Uq.activeItem === Item) {
-        Uq.activeItem = null;
-        // Continue queue
-        if (Uq.running) {
-          Uq.next();
-        }
-      }
-      // Make sure the item is stopped
-      Item.stop();
-    }
-  };
-
-  /**
-   * Sets item progress.
-   */
-  UqItem.progress = function (percent) {
-    $(this.el).find('.imce-uqi-percent').text(Drupal.t('!percent%', {'!percent': percent * 1})).end().find('.imce-uqi-bar').css('width', percent * 1 + '%');
-  };
-
-
-  /**
-   * Change event of upload queue input
-   */
-  imce.eUqInputChange = function () {
-    this.Uq.selectFiles(this.files);
-    imce.uploadResetInput(this);
-    if (imce.getConf('upload_auto_start', 1)) {
-      $('.imce-upload-button', this.form).click();
-    }
-  };
-
-  /**
-   * Click event for cancel button of queue item.
-   */
-  imce.eUqItemCancelClick = function (event) {
-    var Item = $(this).closest('.imce-uqi')[0].Item;
-    if (Item) {
-      Item.remove(true);
-    }
-    return false;
-  };
-
-  /**
-   * Mousedown event for cancel button of queue item.
-   */
-  imce.eUqItemCancelMousedown = function (event) {
-    return false;
-  };
-
-  /**
-   * Fadeout callback for queue item.
-   */
-  imce.eUqItemFadeout = function () {
-    $(this).remove();
-  };
-
-  /**
-   * Ajax beforeSend handler of upload queue.
-   */
-  imce.xUqItemBeforeSend = function (xhr) {
-    var id = this.itemId;
-    xhr.upload.onprogress = function (e) {
-      var Item = imce.activeUq.getItem(id);
-      if (Item) {
-        Item.progress(parseInt(e.loaded * 100 / e.total));
-      }
-    };
-    xhr = null;
-  };
-
-  /**
-   * Ajax complete handler of upload queue.
-   */
-  imce.xUqItemComplete = function (xhr, status) {
-    var opt = this;
-    var Item = imce.activeUq.getItem(opt.itemId);
-    status = !!(opt.response && opt.response.added);
-    if (Item) {
-      Item.complete(status);
-    }
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/plugins/imce/imce.delete.js b/web/modules/imce/js/plugins/imce/imce.delete.js
deleted file mode 100644
index 6df0102c9cc27f99d2477023a94cd6a5bf062a03..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/imce/imce.delete.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines Delete plugin for Imce.
-   */
-
-  /**
-   * Init handler for Delete.
-   */
-  imce.bind('init', imce.deleteInit = function () {
-    // Check if delete permission exists.
-    if (imce.hasPermission('delete_files') || imce.hasPermission('delete_subfolders')) {
-      // Add toolbar button.
-      imce.addTbb('delete', {
-        title: Drupal.t('Delete'),
-        permission: 'delete_files|delete_subfolders',
-        handler: imce.deleteSelection,
-        shortcut: 'DEL',
-        icon: 'delete'
-      });
-    }
-  });
-
-  /**
-   * Deletes the selected items in the active folder.
-   */
-  imce.deleteSelection = function () {
-    var items = imce.getSelection();
-    if (imce.validateDelete(items)) {
-      if (confirm(Drupal.formatPlural(items.length, 'Delete !filename?', 'Delete the selected @count items?', {'!filename': items[0].name}))) {
-        imce.ajaxItems('delete', items);
-      }
-    }
-  };
-
-  /**
-   * Validates item deletion.
-   */
-  imce.validateDelete = function (items) {
-    return imce.activeFolder.isReady() && imce.validateCount(items) && imce.validatePermissions(items, 'delete_files', 'delete_subfolders') && imce.validatePredefinedPath(items);
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/plugins/imce/imce.newfolder.js b/web/modules/imce/js/plugins/imce/imce.newfolder.js
deleted file mode 100644
index 694f84f922cdb4770406ab70adb501a95d82aa44..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/imce/imce.newfolder.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines Newfolder plugin for Imce.
-   */
-
-  /**
-   * Init handler for New folder.
-   */
-  imce.bind('init', imce.newfolderInit = function () {
-    if (imce.hasPermission('create_subfolders')) {
-      // Add toolbar button
-      imce.addTbb('newfolder', {
-        title: Drupal.t('New folder'),
-        permission: 'create_subfolders',
-        content: imce.createNewfolderForm(),
-        shortcut: 'Ctrl+N',
-        icon: 'folder-add'
-      });
-    }
-  });
-
-  /**
-   * Creates new folder form.
-   */
-  imce.createNewfolderForm = function () {
-    var form = imce.newfolderForm;
-    if (!form) {
-      form = imce.newfolderForm = imce.createEl('<form class="imce-newfolder-form"><input type="text" name="newfolder" class="imce-newfolder-input" size="16" /><button type="submit" name="op" class="imce-newfolder-button">' + Drupal.t('Create') + '</button></form>');
-      form.elements.newfolder.placeholder = Drupal.t('Folder name');
-      form.onsubmit = imce.eNewfolderSubmit;
-    }
-    return form;
-  };
-
-  /**
-   * Submit event for new folder form.
-   */
-  imce.eNewfolderSubmit = function () {
-    var name = this.elements.newfolder.value;
-    if (imce.validateNewfolder(name)) {
-      imce.ajax('newfolder', {data: {newfolder: name}});
-      imce.getTbb('newfolder').closePopup();
-    }
-    return false;
-  };
-
-  /**
-   * Validates new folder creation.
-   */
-  imce.validateNewfolder = function (name, parentFolder) {
-    if (!parentFolder) {
-      parentFolder = imce.activeFolder;
-    }
-    if (!parentFolder.isReady() || !parentFolder.getPermission('create_subfolders') || !imce.validateFileName(name)) {
-      return false;
-    }
-    if (parentFolder.getItem(name)) {
-      imce.setMessage(Drupal.t('%filename already exists.', {'%filename': name}));
-      return false;
-    }
-    return true;
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/plugins/imce/imce.resize.js b/web/modules/imce/js/plugins/imce/imce.resize.js
deleted file mode 100644
index 088cdb34583b6e3b1acff86720114d2ebb3e6c48..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/imce/imce.resize.js
+++ /dev/null
@@ -1,107 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines Resize plugin for Imce.
-   */
-
-  /**
-   * Init handler for Resize.
-   */
-  imce.bind('init', imce.resizeInit = function () {
-    if (imce.hasPermission('resize_images')) {
-      // Add toolbar button
-      imce.addTbb('resize', {
-        title: Drupal.t('Resize'),
-        permission: 'resize_images',
-        content: imce.createResizeForm(),
-        shortcut: 'Ctrl+Alt+R',
-        icon: 'image'
-      });
-    }
-  });
-
-  /**
-   * Creates resize form.
-   */
-  imce.createResizeForm = function () {
-    var form = imce.resizeForm;
-    if (!form) {
-      form = imce.resizeForm = imce.createEl('<form class="imce-resize-form">' +
-        '<div class="imce-form-item imce-resize-dimensions">' +
-          '<input type="number" name="width" class="imce-resize-width-input" min="1" step="1" />' +
-          '<span class="imce-resize-separator">x</span>' +
-          '<input type="number" name="height" class="imce-resize-height-input" min="1" step="1" />' +
-        '</div>' +
-        '<div class="imce-form-item imce-resize-copy">' +
-          '<label><input type="checkbox" name="copy" class="imce-resize-copy-input" />' + Drupal.t('Create a copy') + '</label>' +
-        '</div>' +
-        '<div class="imce-form-actions">' +
-          '<button type="submit" name="op" class="imce-resize-button">' + Drupal.t('Resize') + '</button>' +
-        '</div>' +
-      '</form>');
-      form.onsubmit = imce.eResizeSubmit;
-      // Set max values
-      var els = form.elements;
-      els.width.max = imce.getConf('maxwidth') || 10000;
-      els.height.max = imce.getConf('maxheight') || 10000;
-      // Set placeholders
-      els.width.placeholder = Drupal.t('Width');
-      els.height.placeholder = Drupal.t('Height');
-      // Set focus event
-      els.width.onfocus = els.height.onfocus = imce.eResizeInputFocus;
-    }
-    return form;
-  };
-
-  /**
-   * Submit event for resize form.
-   */
-  imce.eResizeSubmit = function () {
-    var data;
-    var els = this.elements;
-    var width = parseInt(els.width.value * 1);
-    var height = parseInt(els.height.value * 1);
-    var copy = els.copy.checked ? 1 : 0;
-    var items = imce.getSelection();
-    if (imce.validateResize(items, width, height, copy)) {
-      data = {width: width, height: height, copy: copy};
-      imce.ajaxItems('resize', items, {data: data});
-      imce.getTbb('resize').closePopup();
-    }
-    return false;
-  };
-
-  /**
-   * Validates item resizing.
-   */
-  imce.validateResize = function (items, width, height, copy) {
-    return imce.activeFolder.isReady() && imce.validateCount(items) && imce.validateImageTypes(items) && imce.validateDimensions(items, width, height) && imce.validatePermissions(items, 'resize_images');
-  };
-
-  /**
-   * Focus event for resize width/height input.
-   */
-  imce.eResizeInputFocus = function () {
-    var el = this;
-    var val = el.value;
-    // Apply aspect ratio of the selected image after min delay.
-    setTimeout(function () {
-      if (el === document.activeElement && val === el.value) {
-        var ratio;
-        var els = el.form.elements;
-        var isWidth = els.width === el;
-        var value = els[isWidth ? 'height' : 'width'].value * 1;
-        var Item = imce.previewingItem;
-        if (Item && Item.width && value) {
-          ratio = Item.width / Item.height;
-          el.value = Math.round(isWidth ? value * ratio : value / ratio);
-        }
-        el = null;
-      }
-    });
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/js/plugins/imce/imce.upload.js b/web/modules/imce/js/plugins/imce/imce.upload.js
deleted file mode 100644
index e094ef3e8c9bef81ddee6b37031346d614e666de..0000000000000000000000000000000000000000
--- a/web/modules/imce/js/plugins/imce/imce.upload.js
+++ /dev/null
@@ -1,260 +0,0 @@
-/*global imce:true*/
-(function ($, Drupal, imce) {
-  'use strict';
-
-  /**
-   * @file
-   * Defines Upload plugin for Imce.
-   */
-
-  /**
-   * Init handler for Upload.
-   */
-  imce.bind('init', imce.uploadInit = function () {
-    if (imce.hasPermission('upload_files')) {
-      // Add toolbar button
-      imce.addTbb('upload', {
-        title: Drupal.t('Upload'),
-        permission: 'upload_files',
-        content: imce.createUploadForm(),
-        shortcut: 'Ctrl+Alt+U',
-        icon: 'upload'
-      });
-    }
-  });
-
-  /**
-   * Creates the upload form.
-   */
-  imce.createUploadForm = function () {
-    var els;
-    var el;
-    var exts;
-    var form = imce.uploadForm;
-    var name = 'files[imce][]';
-    if (form) {
-      return form;
-    }
-    form = imce.uploadForm = imce.createEl('<form class="imce-upload-form" method="post" enctype="multipart/form-data" accept-charset="UTF-8">' +
-    '<div class="imce-form-item imce-form-file">' +
-      '<label>' + Drupal.t('File') + '</label>' +
-      '<input type="file" name="' + name + '" class="imce-file-input" multiple />' +
-    '</div>' +
-    '<div class="imce-form-actions">' +
-      '<button type="submit" name="op" class="imce-upload-button">' + Drupal.t('Upload') + '</button>' +
-    '</div>' +
-    '<input type="hidden" name="jsop" value="upload" />' +
-    '<input type="hidden" name="token" />' +
-  '</form>');
-    // Set action
-    form.action = imce.getConf('ajax_url');
-    els = form.elements;
-    // Set token
-    els.token.value = imce.getConf('token');
-    // Set accepted extensions.
-    el = els[name];
-    exts = imce.getConf('extensions', '');
-    // Skip for * which is interpreted incorrectly by some browsers.
-    if (exts !== '*') {
-      el.accept = '.' + exts.replace(/\s+/g, ',.');
-    }
-    // Ajax upload
-    if (imce.canAjaxUpload()) {
-      imce.activeUq = new imce.UploadQueue({name: name, accept: el.accept});
-      form.insertBefore(imce.activeUq.el, form.firstChild);
-      form.className += ' uq';
-      if (imce.getConf('upload_auto_start', 1)) {
-        form.className += ' auto-start';
-      }
-      form.onsubmit = imce.eUploadQueueSubmit;
-    }
-    // Iframe upload
-    else {
-      form.setAttribute('target', 'imce_upload_iframe');
-      form.appendChild(imce.createEl('<input type="hidden" name="active_path" />'));
-      form.appendChild(imce.createEl('<input type="hidden" name="return_html" value="1" />'));
-      form.onsubmit = imce.eUploadIframeSubmit;
-    }
-    return form;
-  };
-
-  /**
-   * Submit event for upload form with the upload queue.
-   */
-  imce.eUploadQueueSubmit = function (event) {
-    imce.activeUq.start();
-    return false;
-  };
-
-  /**
-   * Submit event for upload form with iframe.
-   */
-  imce.eUploadIframeSubmit = function (event) {
-    if (!imce.validateUploadForm(this)) {
-      return false;
-    }
-    imce.createUploadIframe();
-    this.elements.active_path.value = imce.activeFolder.getPath();
-    imce.uploadSetBusy(true);
-  };
-
-  /**
-   * Validates upload form before submit.
-   */
-  imce.validateUploadForm = function (form) {
-    var i;
-    var file;
-    var input = form.elements['files[imce][]'];
-    var files = input.files;
-    // HTML5
-    if (files) {
-      if (!files.length) {
-        return false;
-      }
-      for (i = 0; file = files[i]; i++) {
-        if (!imce.validateFileUpload(file)) {
-          return false;
-        }
-      }
-      return true;
-    }
-    // Old file input
-    if (input.value) {
-      file = {name: input.value.split(input.value.indexOf('/') === -1 ? '\\' : '/').pop()};
-      return imce.validateFileUpload(file);
-    }
-    return false;
-  };
-
-  /**
-   * Validates a file before uploading.
-   */
-  imce.validateFileUpload = function (file) {
-    // Extension
-    var exts = imce.getConf('extensions', '');
-    if (exts !== '*' && !imce.validateExtension(imce.getExt(file.name), exts)) {
-      return false;
-    }
-    // Size
-    var maxsize = imce.getConf('maxsize');
-    if (maxsize && file.size && file.size > maxsize) {
-      imce.setMessage(Drupal.t('%filename is %filesize exceeding the maximum file size of %maxsize.', {
-        '%filename': file.name,
-        '%filesize': imce.formatSize(file.size),
-        '%maxsize': imce.formatSize(maxsize)
-      }));
-      return false;
-    }
-    // Name
-    if (!imce.validateFileName(file.name)) {
-      return false;
-    }
-    // Trigger validators.
-    return $.inArray(false, imce.trigger('validateFileUpload', file)) === -1;
-  };
-
-  /**
-   * Creates upload iframe.
-   */
-  imce.createUploadIframe = function () {
-    var el = imce.uploadIframe;
-    if (!el) {
-      el = imce.uploadIframe = imce.createEl('<iframe name="imce_upload_iframe" class="imce-upload-iframe" style="position: absolute; top: -9999px; left: -9999px;" src="javascript: "></iframe>');
-      document.body.appendChild(el);
-      setTimeout(function () {
-        el.onload = imce.eUploadIframeLoad;
-      });
-    }
-    return el;
-  };
-
-  /**
-   * Load event of upload iframe.
-   */
-  imce.eUploadIframeLoad = function (event) {
-    var text;
-    var response;
-    var doc;
-    var $body;
-    var el = this;
-    try {
-      doc = el.contentDocument || el.contentWindow && el.contentWindow.document;
-      if (doc) {
-        $body = $(doc.body);
-        if (text = $body.find('textarea').eq(0).val()) {
-          response = $.parseJSON(text);
-        }
-        $body.empty();
-      }
-    }
-    catch (err) {
-      imce.delayError(err);
-    }
-    imce.uploadIframeComplete(response, text);
-  };
-
-  /**
-   * Complete handler of iframe upload;
-   */
-  imce.uploadIframeComplete = function (response, text) {
-    // Got a proper response
-    if (response) {
-      imce.ajaxProcessResponse(response);
-      if (response.added) {
-        imce.uploadResetInput(imce.uploadForm.elements['files[imce][]']);
-        imce.getTbb('upload').closePopup();
-      }
-    }
-    // Failed
-    else {
-      imce.setMessage(Drupal.t('Invalid response received from the server.'));
-      if (text) {
-        imce.setMessage('<pre>' + Drupal.checkPlain(text) + '</pre>');
-      }
-    }
-    imce.uploadSetBusy(false);
-  };
-
-  /**
-   * Set upload busy state.
-   */
-  imce.uploadSetBusy = function (state) {
-    $('.imce-upload-button', imce.uploadForm).toggleClass('busy', state)[0].disabled = state;
-  };
-
-  /**
-   * Check support for ajax upload.
-   */
-  imce.canAjaxUpload = function () {
-    var support = imce.ajaxUploadSupport;
-    if (support == null) {
-      try {
-        support = !!(window.FormData && (new XMLHttpRequest().upload));
-      }
-      catch (err) {
-        support = false;
-      }
-      imce.ajaxUploadSupport = support;
-    }
-    return support;
-  };
-
-  /**
-   * Resets a file input.
-   */
-  imce.uploadResetInput = function (input) {
-    // Try value reset first
-    if ($(input).val('').val()) {
-      // Use form reset
-      var form = document.createElement('form');
-      var parent = input.parentNode;
-      form.style.display = 'none';
-      parent.insertBefore(form, input);
-      form.appendChild(input);
-      form.reset();
-      parent.insertBefore(input, form);
-      parent.removeChild(form);
-    }
-  };
-
-})(jQuery, Drupal, imce);
diff --git a/web/modules/imce/src/Annotation/ImcePlugin.php b/web/modules/imce/src/Annotation/ImcePlugin.php
deleted file mode 100644
index 76f613e267b2a92d6f9d41019582f7c10b8d8657..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Annotation/ImcePlugin.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-namespace Drupal\imce\Annotation;
-
-use Drupal\Component\Annotation\Plugin;
-
-/**
- * Defines an ImcePlugin annotation object.
- *
- * Plugin Namespace: Plugin\ImcePlugin
- *
- * @see \Drupal\imce\ImcePluginBase
- *
- * @Annotation
- */
-class ImcePlugin extends Plugin {
-
-  /**
-   * Plugin ID.
-   *
-   * @var string
-   */
-  public $id;
-
-  /**
-   * Plugin label.
-   *
-   * @ingroup plugin_translatable
-   *
-   * @var \Drupal\Core\Annotation\Translation
-   */
-  public $label;
-
-  /**
-   * Plugin weight.
-   *
-   * @var int
-   */
-  public $weight = 0;
-
-  /**
-   * Operation definitions.
-   *
-   * @var array
-   */
-  public $operations = [];
-
-}
diff --git a/web/modules/imce/src/Controller/ImceController.php b/web/modules/imce/src/Controller/ImceController.php
deleted file mode 100644
index aecb7ef869cafd0e0515f35cad9a7305640baea0..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Controller/ImceController.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace Drupal\imce\Controller;
-
-use Symfony\Component\HttpFoundation\Request;
-use Drupal\Core\Controller\ControllerBase;
-use Drupal\Core\Access\AccessResult;
-use Drupal\imce\Imce;
-
-/**
- * Controller routines for imce routes.
- */
-class ImceController extends ControllerBase {
-
-  /**
-   * Returns an administrative overview of Imce Profiles.
-   */
-  public function adminOverview(Request $request) {
-    // Build the settings form first.(may redirect)
-    $output['settings_form'] = \Drupal::formBuilder()->getForm('Drupal\imce\Form\ImceSettingsForm') + ['#weight' => 10];
-    // Buld profile list.
-    $output['profile_list'] = [
-      '#type' => 'container',
-      '#attributes' => ['class' => ['imce-profile-list']],
-      'title' => ['#markup' => '<h2>' . $this->t('Configuration Profiles') . '</h2>'],
-      'list' => $this->entityTypeManager()->getListBuilder('imce_profile')->render(),
-    ];
-    return $output;
-  }
-
-  /**
-   * Handles requests to /imce/{scheme} path.
-   */
-  public function page($scheme, Request $request) {
-    return Imce::response($request, $this->currentUser(), $scheme);
-  }
-
-  /**
-   * Checks access to /imce/{scheme} path.
-   */
-  public function checkAccess($scheme) {
-    return AccessResult::allowedIf(Imce::access($this->currentUser(), $scheme));
-  }
-
-}
diff --git a/web/modules/imce/src/Entity/ImceProfile.php b/web/modules/imce/src/Entity/ImceProfile.php
deleted file mode 100644
index 408f4ffaecebce88c5cfbb4754e1f4f1318bbb44..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Entity/ImceProfile.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace Drupal\imce\Entity;
-
-use Drupal\Core\Config\Entity\ConfigEntityBase;
-
-/**
- * Defines the Imce Profile entity.
- *
- * @ConfigEntityType(
- *   id = "imce_profile",
- *   label = @Translation("Imce Profile"),
- *   handlers = {
- *     "list_builder" = "Drupal\imce\ImceProfileListBuilder",
- *     "form" = {
- *       "add" = "Drupal\imce\Form\ImceProfileForm",
- *       "edit" = "Drupal\imce\Form\ImceProfileForm",
- *       "delete" = "Drupal\imce\Form\ImceProfileDeleteForm",
- *       "duplicate" = "Drupal\imce\Form\ImceProfileForm"
- *     }
- *   },
- *   admin_permission = "administer imce",
- *   config_prefix = "profile",
- *   entity_keys = {
- *     "id" = "id",
- *     "label" = "label"
- *   },
- *   links = {
- *     "edit-form" = "/admin/config/media/imce/{imce_profile}",
- *     "delete-form" = "/admin/config/media/imce/{imce_profile}/delete",
- *     "duplicate-form" = "/admin/config/media/imce/{imce_profile}/duplicate"
- *   }
- * )
- */
-class ImceProfile extends ConfigEntityBase {
-
-  /**
-   * Profile ID.
-   *
-   * @var string
-   */
-  protected $id;
-
-  /**
-   * Label.
-   *
-   * @var string
-   */
-  protected $label;
-
-  /**
-   * Description.
-   *
-   * @var string
-   */
-  protected $description;
-
-  /**
-   * Configuration options.
-   *
-   * @var array
-   */
-  protected $conf = [];
-
-  /**
-   * Returns configuration options.
-   */
-  public function getConf($key = NULL, $default = NULL) {
-    $conf = $this->conf;
-    if (isset($key)) {
-      return isset($conf[$key]) ? $conf[$key] : $default;
-    }
-    return $conf;
-  }
-
-}
diff --git a/web/modules/imce/src/Form/ImceProfileDeleteForm.php b/web/modules/imce/src/Form/ImceProfileDeleteForm.php
deleted file mode 100644
index 7254221026991a691d4e614b039c9441e1bbf5d1..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Form/ImceProfileDeleteForm.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace Drupal\imce\Form;
-
-use Drupal\Core\Entity\EntityConfirmFormBase;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-
-/**
- * Provides a deletion confirmation form for Imce Profile.
- */
-class ImceProfileDeleteForm extends EntityConfirmFormBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getQuestion() {
-    return $this->t('Are you sure you want to delete the profile %name?', ['%name' => $this->entity->label()]);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCancelUrl() {
-    return new Url('imce.admin');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfirmText() {
-    return $this->t('Delete');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->entity->delete();
-    drupal_set_message($this->t('Profile %name has been deleted.', ['%name' => $this->entity->label()]));
-    $form_state->setRedirectUrl($this->getCancelUrl());
-  }
-
-}
diff --git a/web/modules/imce/src/Form/ImceProfileForm.php b/web/modules/imce/src/Form/ImceProfileForm.php
deleted file mode 100644
index 09f8717fdcb288d59aebf5aea6dcade49b049f0a..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Form/ImceProfileForm.php
+++ /dev/null
@@ -1,260 +0,0 @@
-<?php
-
-namespace Drupal\imce\Form;
-
-use Drupal\Core\Entity\EntityForm;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\imce\Imce;
-
-/**
- * Base form for Imce Profile entities.
- */
-class ImceProfileForm extends EntityForm {
-
-  /**
-   * Folder permissions.
-   *
-   * @var array
-   */
-  public $folderPermissions;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function form(array $form, FormStateInterface $form_state) {
-    $imce_profile = $this->getEntity();
-    // Check duplication
-    if ($this->getOperation() === 'duplicate') {
-      $imce_profile = $imce_profile->createDuplicate();
-      $imce_profile->set('label', $this->t('Duplicate of @label', ['@label' => $imce_profile->label()]));
-      $this->setEntity($imce_profile);
-    }
-    // Label
-    $form['label'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Name'),
-      '#default_value' => $imce_profile->label(),
-      '#maxlength' => 64,
-      '#required' => TRUE,
-      '#weight' => -20,
-    ];
-    // Id
-    $form['id'] = [
-      '#type' => 'machine_name',
-      '#machine_name' => [
-        'exists' => [get_class($imce_profile), 'load'],
-        'source' => ['label'],
-      ],
-      '#default_value' => $imce_profile->id(),
-      '#maxlength' => 32,
-      '#required' => TRUE,
-      '#weight' => -20,
-    ];
-    // Description
-    $form['description'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Description'),
-      '#default_value' => $imce_profile->get('description'),
-      '#weight' => -10,
-    ];
-    // Conf
-    $conf = [
-      '#tree' => TRUE,
-    ];
-    // Extensions
-    $conf['extensions'] = [
-      '#type' => 'textfield',
-      '#title' => $this->t('Allowed file extensions'),
-      '#default_value' => $imce_profile->getConf('extensions'),
-      '#maxlength' => 255,
-      '#description' => $this->t('Separate extensions with a space, and do not include the leading dot.') . ' ' . $this->t('Set to * to allow all extensions.'),
-      '#weight' => -9,
-    ];
-    // File size
-    $maxsize = file_upload_max_size();
-    $conf['maxsize'] = [
-      '#type' => 'number',
-      '#min' => 0,
-      '#max' => ceil($maxsize/1024/1024),
-      '#step' => 'any',
-      '#size' => 8,
-      '#title' => $this->t('Maximum file size'),
-      '#default_value' => $imce_profile->getConf('maxsize'),
-      '#description' => $this->t('Maximum allowed file size per upload.') . ' ' . t('Your PHP settings limit the upload size to %size.', ['%size' => format_size($maxsize)]),
-      '#field_suffix' => $this->t('MB'),
-      '#weight' => -8,
-    ];
-    // Quota
-    $conf['quota'] = [
-      '#type' => 'number',
-      '#min' => 0,
-      '#step' => 'any',
-      '#size' => 8,
-      '#title' => $this->t('Disk quota'),
-      '#default_value' => $imce_profile->getConf('quota'),
-      '#description' => $this->t('Maximum disk space that can be allocated by a user.'),
-      '#field_suffix' => $this->t('MB'),
-      '#weight' => -7,
-    ];
-    // Image dimensions
-    $conf['dimensions'] = [
-      '#type' => 'container',
-      '#attributes' => ['class' => ['dimensions-wrapper form-item']],
-      '#weight' => -6,
-    ];
-    $conf['dimensions']['label'] = [
-      '#markup' => '<label>' . $this->t('Maximum image dimensions') . '</label>',
-    ];
-    $conf['dimensions']['maxwidth'] = [
-      '#type' => 'number',
-      '#default_value' => $imce_profile->getConf('maxwidth'),
-      '#maxlength' => 5,
-      '#min' => 0,
-      '#size' => 8,
-      '#placeholder' => $this->t('Width'),
-      '#field_suffix' => ' x ',
-      '#parents' => ['conf', 'maxwidth'],
-    ];
-    $conf['dimensions']['maxheight'] = [
-      '#type' => 'number',
-      '#default_value' => $imce_profile->getConf('maxheight'),
-      '#maxlength' => 5,
-      '#min' => 0,
-      '#size' => 8,
-      '#placeholder' => $this->t('Height'),
-      '#field_suffix' => $this->t('pixels'),
-      '#parents' => ['conf', 'maxheight'],
-    ];
-    $conf['dimensions']['description'] = [
-      '#markup' => '<div class="description">' . $this->t('Images exceeding the limit will be scaled down.') . '</div>',
-    ];
-    // Replace method
-    $conf['replace'] = [
-      '#type' => 'radios',
-      '#title' => $this->t('Upload replace method'),
-      '#default_value' => $imce_profile->getConf('replace', FILE_EXISTS_RENAME),
-      '#options' => [
-        FILE_EXISTS_RENAME => t('Keep the existing file renaming the new one'),
-        FILE_EXISTS_REPLACE => t('Replace the existing file with the new one'),
-        FILE_EXISTS_ERROR => t('Keep the existing file rejecting the new one'),
-      ],
-      '#description' => $this->t('Select the replace method for existing files during uploads.'),
-      '#weight' => -5,
-    ];
-    // Folders
-    $conf['folders'] = [
-      '#type' => 'fieldset',
-      '#title' => $this->t('Folders'),
-      'description' => ['#markup' => '<div class="description">' . $this->t('You can use user tokens in folder paths, e.g. @tokens.', ['@tokens' => '[user:uid], [user:name]' ]) . ' ' . $this->t('Subfolders inherit parent permissions when subfolder browsing is enabled.') . '</div>'],
-      '#weight' => 10,
-    ];
-    $folders = $imce_profile->getConf('folders', []);
-    $index = 0;
-    foreach ($folders as $folder) {
-      $conf['folders'][] = $this->folderForm($index++, $folder);
-    }
-    $conf['folders'][] = $this->folderForm($index++);
-    $conf['folders'][] = $this->folderForm($index);
-    $form['conf'] = $conf;
-    // Add library
-    $form['#attached']['library'][] = 'imce/drupal.imce.admin';
-    // Call plugin form alterers
-    \Drupal::service('plugin.manager.imce.plugin')->alterProfileForm($form, $form_state, $imce_profile);
-    return parent::form($form, $form_state);
-  }
-
-  /**
-   * Returns folder form elements.
-   */
-  public function folderForm($index, array $folder = []) {
-    $folder += ['path' => '', 'permissions' => []];
-    $form = [
-      '#type' => 'container',
-      '#attributes' => ['class' => ['folder-container']],
-    ];
-    $form['path'] = [
-      '#type' => 'textfield',
-      '#default_value' => $folder['path'],
-      '#field_prefix' => '&lt;' . $this->t('root') . '&gt;' . '/',
-    ];
-    $form['permissions'] = [
-      '#type' => 'fieldset',
-      '#title' => $this->t('Permissions'),
-      '#attributes' => ['class' => ['folder-permissions']],
-    ];
-    $perms = $this->permissionInfo();
-    $form['permissions']['all'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('All permissions'),
-      '#default_value' => isset($folder['permissions']['all']) ? $folder['permissions']['all'] : 0,
-    ];
-    foreach ($perms as $perm => $title) {
-      $form['permissions'][$perm] = [
-        '#type' => 'checkbox',
-        '#title' => $title,
-        '#default_value' => isset($folder['permissions'][$perm]) ? $folder['permissions'][$perm] : 0,
-        '#states' => [
-          'disabled' => ['input[name="conf[folders][' . $index . '][permissions][all]"]' => ['checked' => TRUE]],
-        ],
-      ];
-    }
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function validateForm(array &$form, FormStateInterface $form_state) {
-    // Check folders
-    $folders = [];
-    foreach ($form_state->getValue(['conf', 'folders']) as $i => $folder) {
-      $path = trim($folder['path']);
-      // Empty path
-      if ($path === '') {
-        continue;
-      }
-      // Validate path
-      if (!Imce::regularPath($path)) {
-        return $form_state->setError($form['conf']['folders'][$i]['path'], $this->t('Invalid folder path.'));
-      }
-      // Remove empty permissions
-      $folder['permissions'] = array_filter($folder['permissions']);
-      $folder['path'] = $path;
-      $folders[$path] = $folder;
-    }
-    // No valid folders
-    if (!$folders) {
-      return $form_state->setError($form['conf']['folders'][0]['path'], $this->t('You must define a folder.'));
-    }
-    $form_state->setValue(['conf', 'folders'], array_values($folders));
-    // Call plugin validators
-    \Drupal::service('plugin.manager.imce.plugin')->validateProfileForm($form, $form_state, $this->getEntity());
-    return parent::validateForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function save(array $form, FormStateInterface $form_state) {
-    $imce_profile = $this->getEntity();
-    $status = $imce_profile->save();
-    if ($status == SAVED_NEW) {
-      drupal_set_message($this->t('Profile %name has been added.', ['%name' => $imce_profile->label()]));
-    }
-    elseif ($status == SAVED_UPDATED) {
-      drupal_set_message($this->t('The changes have been saved.'));
-    }
-    $form_state->setRedirect('entity.imce_profile.edit_form', ['imce_profile' => $imce_profile->id()]);
-  }
-
-  /**
-   * Returns folder permission definitions.
-   */
-  public function permissionInfo() {
-    if (!isset($this->folderPermissions)) {
-      $this->folderPermissions = \Drupal::service('plugin.manager.imce.plugin')->permissionInfo();
-    }
-    return $this->folderPermissions;
-  }
-
-}
diff --git a/web/modules/imce/src/Form/ImceSettingsForm.php b/web/modules/imce/src/Form/ImceSettingsForm.php
deleted file mode 100644
index c0c6e3159e9cf6ab39e813e297e37c0b0b709485..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Form/ImceSettingsForm.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-namespace Drupal\imce\Form;
-
-use Drupal\Core\Form\ConfigFormBase;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\StreamWrapper\StreamWrapperInterface;
-use Drupal\Component\Utility\Html;
-use Drupal\Core\Url;
-use Drupal\user\RoleInterface;
-
-/**
- * Imce settings form.
- */
-class ImceSettingsForm extends ConfigFormBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'imce_settings_form';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEditableConfigNames() {
-    return ['imce.settings'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $config = $this->config('imce.settings');
-    $form['roles_profiles'] = $this->buildRolesProfilesTable($config->get('roles_profiles') ?: []);
-    // Common settings container
-    $form['common'] = [
-      '#type' => 'details',
-      '#title' => $this->t('Common settings'),
-    ];
-    $form['common']['abs_urls'] = [
-      '#type' => 'checkbox',
-      '#title' => t('Enable absolute URLs'),
-      '#description' => t('Make the file manager return absolute file URLs to other applications.'),
-      '#default_value' => $config->get('abs_urls'),
-    ];
-    $form['common']['admin_theme'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Use admin theme for IMCE paths'),
-      '#default_value' => $config->get('admin_theme'),
-      '#description' => $this->t('If you have user interface issues with the active theme you may consider switching to admin theme.')
-    ];
-    $form['#attached']['library'][] = 'imce/drupal.imce.admin';
-    return parent::buildForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    $config = $this->config('imce.settings');
-    // Absolute URLs
-    $config->set('abs_urls', $form_state->getValue('abs_urls'));
-    // Admin theme
-    $config->set('admin_theme', $form_state->getValue('admin_theme'));
-    // Role-profile assignments.
-    $old_roles_profiles = $config->get('roles_profiles');
-    $roles_profiles = $form_state->getValue('roles_profiles');
-    // Filter empty values
-    foreach ($roles_profiles as $rid => &$profiles) {
-      if (!$profiles = array_filter($profiles)) {
-        unset($roles_profiles[$rid]); 
-      }
-    }
-    $config->set('roles_profiles', $roles_profiles);
-    $config->save();
-    // Warn about anonymous access
-    if (!empty($roles_profiles[RoleInterface::ANONYMOUS_ID])) {
-      drupal_set_message(t('You have enabled anonymous access to the file manager. Please make sure this is not a misconfiguration.'), 'warning');
-    }
-    parent::submitForm($form, $form_state);
-  }
-
-  /**
-   * Returns roles-profiles table.
-   */
-  public function buildRolesProfilesTable(array $roles_profiles) {
-    $rp_table = ['#type' => 'table'];
-    // Prepare roles
-    $roles = user_roles();
-    $wrappers = \Drupal::service('stream_wrapper_manager')->getNames(StreamWrapperInterface::WRITE_VISIBLE);
-    // Prepare profile options
-    $options = ['' => '-' . $this->t('None') . '-'];
-    foreach (\Drupal::entityTypeManager()->getStorage('imce_profile')->loadMultiple() as $pid => $profile) {
-      $options[$pid] = $profile->label();
-    }
-    // Build header
-    $imce_url = Url::fromRoute('imce.page')->toString();
-    $rp_table['#header'] = [$this->t('Role')];
-    $default = file_default_scheme();
-    foreach ($wrappers as $scheme => $name) {
-      $url = $scheme === $default ? $imce_url : $imce_url . '/' . $scheme;
-      $rp_table['#header'][]['data'] = ['#markup' => '<a href="' . $url . '">' . Html::escape($name) . '</a>'];
-    }
-    // Build rows
-    foreach ($roles as $rid => $role) {
-      $rp_table[$rid]['role_name'] = [
-        '#plain_text' => $role->label(),
-      ];
-      foreach ($wrappers as $scheme => $name) {
-        $rp_table[$rid][$scheme] = [
-          '#type' => 'select',
-          '#options' => $options,
-          '#default_value' => isset($roles_profiles[$rid][$scheme]) ? $roles_profiles[$rid][$scheme] : '',
-        ];
-      }
-    }
-    // Add description
-    $rp_table['#prefix'] = '<h3>' . $this->t('Role-profile assignments') . '</h3>';
-    $rp_table['#suffix'] = '<div class="description">' . $this->t('Assign configuration profiles to user roles for available file systems. Users with multiple roles get the bottom most profile.') . ' ' . $this->t('The default file system %name is accessible at :url path.', ['%name' => $wrappers[file_default_scheme()], ':url' => $imce_url]) . '</div>';
-    return $rp_table;
-  }
-
-}
diff --git a/web/modules/imce/src/Imce.php b/web/modules/imce/src/Imce.php
deleted file mode 100644
index 91af3efc29ca457f25d97f49640532c0812ed0c9..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Imce.php
+++ /dev/null
@@ -1,330 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-use Symfony\Component\HttpFoundation\Request;
-use Drupal\Core\Session\AccountProxyInterface;
-
-/**
- * Imce container class for helper methods.
- */
-class Imce {
-
-  /**
-   * Checks if a user has an imce profile assigned for a file scheme.
-   */
-  public static function access(AccountProxyInterface $user = NULL, $scheme = NULL) {
-    return (bool) static::userProfile($user, $scheme);
-  }
-
-  /**
-   * Returns a response for an imce request.
-   */
-  public static function response(Request $request, AccountProxyInterface $user = NULL, $scheme = NULL) {
-    return static::userFM($user, $scheme, $request)->pageResponse();
-  }
-
-  /**
-   * Returns a file manager instance for a user.
-   */
-  public static function userFM(AccountProxyInterface $user = NULL, $scheme = NULL, Request $request = NULL) {
-    if ($conf = static::userConf($user, $scheme)) {
-      return new ImceFM($conf, $user, $request);
-    }
-  }
-
-  /**
-   * Returns imce configuration profile for a user.
-   */
-  public static function userProfile(AccountProxyInterface $user = NULL, $scheme = NULL) {
-    $profiles = &drupal_static(__METHOD__, []);
-    $user = $user ?: \Drupal::currentUser();
-    $scheme = isset($scheme) ? $scheme : file_default_scheme();
-    $profile = &$profiles[$user->id()][$scheme];
-    if (!isset($profile)) {
-      // Check stream wrapper
-      if ($wrapper = \Drupal::service('stream_wrapper_manager')->getViaScheme($scheme)) {
-        $storage = \Drupal::entityTypeManager()->getStorage('imce_profile');
-        if ($user->id() == 1 && $profile = $storage->load('admin')) {
-          return $profile;
-        }
-        $imce_settings = \Drupal::config('imce.settings');
-        $roles_profiles = $imce_settings->get('roles_profiles');
-        $user_roles = array_flip($user->getRoles());
-        // Order roles from more permissive to less permissive.
-        $roles = array_reverse(user_roles());
-        foreach ($roles as $rid => $role) {
-          if (isset($user_roles[$rid]) && !empty($roles_profiles[$rid][$scheme])) {
-            if ($profile = $storage->load($roles_profiles[$rid][$scheme])) {
-              return $profile;
-            }
-          }
-        }
-      }
-      $profile = FALSE;
-    }
-    return $profile;
-  }
-
-  /**
-   * Returns processed profile configuration for a user.
-   */
-  public static function userConf(AccountProxyInterface $user = NULL, $scheme = NULL) {
-    $user = $user ?: \Drupal::currentUser();
-    $scheme = isset($scheme) ? $scheme : file_default_scheme();
-    if ($profile = static::userProfile($user, $scheme)) {
-      $conf = $profile->getConf();
-      $conf['pid'] = $profile->id();
-      $conf['scheme'] = $scheme;
-      return static::processUserConf($conf, $user);
-    }
-  }
-
-  /**
-   * Processes raw profile configuration of a user.
-   */
-  public static function processUserConf(array $conf, AccountProxyInterface $user) {
-    // Convert MB to bytes
-    $conf['maxsize'] *= 1048576;
-    $conf['quota'] *= 1048576;
-    // Set root uri and url
-    $conf['root_uri'] = $conf['scheme'] . '://';
-    // file_create_url requires a filepath for some schemes like private://
-    $conf['root_url'] = preg_replace('@/(?:%2E|\.)$@i', '', file_create_url($conf['root_uri'] . '.'));
-    // Convert to relative
-    if (!\Drupal::config('imce.settings')->get('abs_urls')) {
-      $conf['root_url'] = file_url_transform_relative($conf['root_url']);
-    }
-    $conf['token'] = $user->isAnonymous() ? 'anon' : \Drupal::csrfToken()->get('imce');
-    // Process folders
-    $conf['folders'] = static::processUserFolders($conf['folders'], $user);
-    // Call plugin processors
-    \Drupal::service('plugin.manager.imce.plugin')->processUserConf($conf, $user);
-    return $conf;
-  }
-
-  /**
-   * Processes user folders.
-   */
-  public static function processUserFolders(array $folders, AccountProxyInterface $user) {
-    $ret = [];
-    $token_service = \Drupal::token();
-    $meta = new \Drupal\Core\Render\BubbleableMetadata();
-    $token_data = ['user' => $user];
-    foreach ($folders as $folder) {
-      $path = $token_service->replace($folder['path'], $token_data, [], $meta);
-      if (static::regularPath($path)) {
-        $ret[$path] = $folder;
-        unset($ret[$path]['path']);
-      }
-    }
-    return $ret;
-  }
-
-  /**
-   * Checks a permission in a profile conf.
-   */
-  public static function permissionInConf($permission, array $conf) {
-    if (!empty($conf['folders'])) {
-      foreach ($conf['folders'] as $folder_conf) {
-        if (static::permissionInFolderConf($permission, $folder_conf)) {
-          return TRUE;
-        }
-      }
-    }
-    return FALSE;
-  }
-
-  /**
-   * Checks a permission in a folder conf.
-   */
-  public static function permissionInFolderConf($permission, $folder_conf) {
-    if ($folder_conf && !empty($folder_conf['permissions'])) {
-      $permissions = $folder_conf['permissions'];
-      return isset($permissions[$permission]) ? (bool) $permissions[$permission] : !empty($permissions['all']);
-    }
-    return FALSE;
-  }
-
-  /**
-   * Returns predefined/inherited configuration of a folder path in a profile conf.
-   */
-  public static function folderInConf($path, array $conf) {
-    // Predefined
-    if (isset($conf['folders'][$path])) {
-      return $conf['folders'][$path];
-    }
-    // Inherited
-    if (!empty($conf['folders']) && static::regularPath($path) && is_dir(static::joinPaths($conf['root_uri'], $path))) {
-      foreach ($conf['folders'] as $folder_path => $folder_conf) {
-        $is_root = $folder_path === '.';
-        if ($is_root || strpos($path . '/', $folder_path . '/') === 0) {
-          if (static::permissionInFolderConf('browse_subfolders', $folder_conf)) {
-            // Validate the rest of the path.
-            if ($filter = static::nameFilterInConf($conf)) {
-              $rest = $is_root ? $path : substr($path, strlen($folder_path) + 1);
-              foreach (explode('/', $rest) as $name) {
-                if (preg_match($filter, $name)) {
-                  return;
-                }
-              }
-            }
-            return $folder_conf + ['inherited' => TRUE];
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * Returns name filtering regexp from a profile conf.
-   */
-  public static function nameFilterInConf(array $conf) {
-    $filters = isset($conf['name_filters']) ? $conf['name_filters'] : [];
-    if (empty($conf['allow_dot_files'])) {
-      $filters[] = '^\.|\.$';
-    }
-    return $filters ? '/' . implode('|', $filters) . '/' : '';
-  }
-
-  /**
-   * Splits a path into dirpath and filename.
-   */
-  public static function splitPath($path) {
-    if (is_string($path) && $path != '') {
-      $parts = explode('/', $path);
-      $filename = array_pop($parts);
-      $dirpath = implode('/', $parts);
-      if ($filename !== '') {
-        return [$dirpath === '' ? '.' : $dirpath, $filename];
-      }
-    }
-  }
-
-  /**
-   * Creates a fle path by joining a dirpath and a filename.
-   */
-  public static function joinPaths($dirpath, $filename) {
-    if ($dirpath === '.') {
-      return $filename;
-    }
-    if ($filename === '.') {
-      return $dirpath;
-    }
-    if (substr($dirpath, -1) !== '/') {
-      $dirpath .= '/';
-    }
-    return $dirpath . $filename;
-  }
-
-  /**
-   * Checks the structure of a folder path.
-   * Forbids current/parent directory notations.
-   */
-  public static function regularPath($path) {
-    return is_string($path) && ($path === '.' || !preg_match('@\\\\|(^|/)\.*(/|$)@', $path));
-  }
-
-  /**
-   * Returns the contents of a directory.
-   */
-  public static function scanDir($diruri, array $options = []) {
-    $content = ['files' => [], 'subfolders' => []];
-    $browse_files = isset($options['browse_files']) ? $options['browse_files'] : TRUE;
-    $browse_subfolders = isset($options['browse_subfolders']) ? $options['browse_subfolders'] : TRUE;
-    if (!$browse_files && !$browse_subfolders) {
-      return $content;
-    }
-    if (!$opendir = opendir($diruri)) {
-      return $content + ['error' => TRUE];
-    }
-    // Prepare filters
-    $name_filter = empty($options['name_filter']) ? FALSE : $options['name_filter'];
-    $callback = empty($options['filter_callback']) ? FALSE : $options['filter_callback'];
-    $uriprefix = substr($diruri, -1) === '/' ? $diruri : $diruri . '/';
-    while (($filename = readdir($opendir)) !== FALSE) {
-      // Exclude special names.
-      if ($filename === '.' || $filename === '..') {
-        continue;
-      }
-      // Check filter regexp.
-      if ($name_filter && preg_match($name_filter, $filename)) {
-        continue;
-      }
-      // Check browse permissions.
-      $fileuri = $uriprefix . $filename;
-      $is_dir = is_dir($fileuri);
-      if ($is_dir ? !$browse_subfolders : !$browse_files) {
-        continue;
-      }
-      // Execute callback.
-      if ($callback) {
-        $result = $callback($filename, $is_dir, $fileuri, $options);
-        if ($result === 'continue') continue;
-        elseif ($result === 'break') break;
-      }
-      $content[$is_dir ? 'subfolders' : 'files'][$filename] = $fileuri;
-    }
-    closedir($opendir);
-    return $content;
-  }
-
-  /**
-   * Returns a managed file entity by uri.
-   * Optionally creates it.
-   */
-  public static function getFileEntity($uri, $create = FALSE, $save = FALSE) {
-    $file = FALSE;
-    if ($files = \Drupal::entityTypeManager()->getStorage('file')->loadByProperties(['uri' => $uri])) {
-      $file = reset($files);
-    }
-    elseif ($create) {
-      $file = static::createFileEntity($uri, $save);
-    }
-    return $file;
-  }
-
-  /**
-   * Creates a file entity with an uri.
-   */
-  public static function createFileEntity($uri, $save = FALSE) {
-    $values = [
-      'uri' => $uri,
-      'uid' => \Drupal::currentUser()->id(),
-      'status' => 1,
-      'filesize' => filesize($uri),
-      'filename' => \Drupal::service('file_system')->basename($uri),
-      'filemime' => \Drupal::service('file.mime_type.guesser')->guess($uri),
-    ];
-    $file = \Drupal::entityTypeManager()->getStorage('file')->create($values);
-    if ($save) {
-      $file->save();
-    }
-    return $file;
-  }
-
-  /**
-   * Checks if the selected file paths are accessible by a user with Imce.
-   * Returns the accessible paths.
-   */
-  public static function accessFilePaths(array $paths, AccountProxyInterface $user = NULL, $scheme = NULL) {
-    $ret = [];
-    if ($fm = static::userFM($user, $scheme)) {
-      foreach ($paths as $path) {
-        if ($fm->checkFile($path)) {
-          $ret[] = $path;
-        }
-      }
-    }
-    return $ret;
-  }
-
-  /**
-   * Checks if a file uri is accessible by a user with Imce.
-   */
-  public static function accessFileUri($uri, AccountProxyInterface $user = NULL) {
-    list($scheme, $path) = explode('://', $uri, 2);
-    return $scheme && $path && Imce::accessFilePaths([$path], $user, $scheme);
-  }
-
-}
\ No newline at end of file
diff --git a/web/modules/imce/src/ImceFM.php b/web/modules/imce/src/ImceFM.php
deleted file mode 100644
index fa4955a53d62a8f70bfed11b0cbe9b13df9b1173..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImceFM.php
+++ /dev/null
@@ -1,655 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpFoundation\JsonResponse;
-use Drupal\Component\Serialization\Json;
-use Drupal\Component\Render\MarkupInterface;
-use Drupal\Component\Utility\Html;
-use Drupal\Core\Session\AccountProxyInterface;
-
-/**
- * Imce File Manager.
- */
-class ImceFM {
-
-  /**
-   * File manager configuration.
-   *
-   * @var array
-   */
-  public $conf;
-
-  /**
-   * Active user.
-   *
-   * @var \Drupal\Core\Session\AccountProxyInterface
-   */
-  public $user;
-
-  /**
-   * Active request.
-   *
-   * @var \Symfony\Component\HttpFoundation\Request
-   */
-  public $request;
-
-  /**
-   * Current validation status for the configuration.
-   *
-   * @var boolean
-   */
-  public $validated;
-
-  /**
-   * Currently selected items.
-   *
-   * @var array
-   */
-  public $selection = [];
-
-  /**
-   * Folder tree.
-   *
-   * @var array
-   */
-  public $tree = [];
-
-  /**
-   * Active folder.
-   *
-   * @var \Drupal\imce\ImceFolder
-   */
-  public $activeFolder;
-
-  /**
-   * Response data.
-   *
-   * @var array
-   */
-  public $response = [];
-
-  /**
-   * Status messages.
-   *
-   * @var array
-   */
-  public $messages = [];
-
-  /**
-   * Constructs the file manager.
-   *
-   * @param array $conf
-   *   File manager configuration
-   * @param \Drupal\Core\Session\AccountProxyInterface $user
-   *   The active user
-   * @param \Symfony\Component\HttpFoundation\Request $request
-   *   The active request that contains parameters for file manager operations
-   */
-  public function __construct(array $conf, AccountProxyInterface $user = NULL, Request $request = NULL) {
-    $this->conf = $conf;
-    $this->user = $user ?: \Drupal::currentUser();
-    $this->request = $request;
-    $this->init();
-  }
-
-  /**
-   * Initializes the file manager by validating the current configuration and request.
-   */
-  protected function init() {
-    if (!isset($this->validated)) {
-      // Create the root.
-      $root = $this->createItem('folder', '.');
-      $root->setPath('.');
-      // Check initialization error
-      if ($error = $this->getInitError()) {
-        $this->setMessage($error);
-      }
-      else {
-        $this->initSelection();
-      }
-      $this->validated = $error === FALSE;
-    }
-  }
-
-  /**
-   * Performs the initialization and returns the first error message.
-   */
-  protected function getInitError() {
-    $conf = &$this->conf;
-    // Check configuration options.
-    $keys = ['folders', 'root_uri'];
-    foreach ($keys as $key) {
-      if (empty($conf[$key])) {
-        return t('Missing configuration %key.', ['%key' => $key]);
-      }
-    }
-    // Check root.
-    $root_uri = $conf['root_uri'];
-    if (!is_dir($root_uri)) {
-      if (!mkdir($root_uri, $this->getConf('chmod_directory', 0775), TRUE)) {
-        return t('Missing root folder.');
-      }
-    }
-    // Check and add predefined folders
-    foreach ($conf['folders'] as $path => $folder_conf) {
-      $path = (string) $path;
-      $uri = $this->createUri($path);
-      if (is_dir($uri) || mkdir($uri, $this->getConf('chmod_directory', 0775), TRUE)) {
-        $this->addFolder($path, $folder_conf);
-      }
-      else {
-        unset($conf['folders'][$path]);
-      }
-    }
-    if (!$conf['folders']) {
-      return t('No valid folder definitions found.');
-    }
-    // Check and set active folder if provided.
-    $path = $this->getPost('active_path');
-    if (isset($path) && $path !== '') {
-      if ($folder = $this->checkFolder($path)) {
-        $this->activeFolder = $folder;
-        // Remember active path
-        if ($this->user->isAuthenticated()) {
-          if (!isset($conf['folders'][$path]) || count($conf['folders']) > 1 || $folder->getPermission('browse_subfolders')) {
-            $this->request->getSession()->set('imce_active_path', $path);
-          }
-        }
-      }
-      else {
-        return t('Invalid active folder path: %path.', ['%path' => $path]);
-      }
-    }
-    return FALSE;
-  }
-
-  /**
-   * Initiates the selection with a list of user provided item paths.
-   */
-  protected function initSelection() {
-    $paths = $this->getPost('selection');
-    if ($paths && is_array($paths)) {
-      foreach ($paths as $path) {
-        if ($item = $this->checkItem($path)) {
-          $item->select();
-        }
-        // Remove non-existing paths from js
-        else {
-          $this->removePathFromJs($path);
-        }
-      }
-    }
-  }
-
-  /**
-   * Runs an operation on the file manager.
-   */
-  public function run($op = NULL) {
-    if (!$this->validated) {
-      return FALSE;
-    }
-    // Check operation.
-    if (!isset($op)) {
-      $op = $this->getOp();
-    }
-    if (!$op || !is_string($op)) {
-      return FALSE;
-    }
-    // Validate security token.
-    $token = $this->getPost('token');
-    if (!$token || $token !== $this->getConf('token')) {
-      $this->setMessage(t('Invalid security token.'));
-      return FALSE;
-    }
-    // Let plugins handle the operation.
-    $return = \Drupal::service('plugin.manager.imce.plugin')->handleOperation($op, $this);
-    if ($return === FALSE) {
-      $this->setMessage(t('Invalid operation %op.', ['%op' => $op]));
-    }
-    return $return;
-  }
-
-  /**
-   * Adds a folder to the tree.
-   */
-  public function addFolder($path, array $conf = NULL) {
-    // Existing.
-    if ($folder = $this->getFolder($path)) {
-      if (isset($conf)) {
-        $folder->setConf($conf);
-      }
-      return $folder;
-    }
-    // New. Append to the parent.
-    if ($parts = Imce::splitPath($path)) {
-      list($parent_path, $name) = $parts;
-      if ($parent = $this->addFolder($parent_path)) {
-        return $parent->addSubfolder($name, $conf);
-      }
-    }
-  }
-
-  /**
-   * Returns a folder from the tree.
-   */
-  public function getFolder($path) {
-    return isset($this->tree[$path]) ? $this->tree[$path] : NULL;
-  }
-
-  /**
-   * Checks if the user provided folder path is accessible.
-   * Returns the folder object with the path.
-   */
-  public function checkFolder($path) {
-    if (is_array(Imce::folderInConf($path, $this->conf))) {
-      return $this->addFolder($path);
-    }
-  }
-
-  /**
-   * Checks if the user provided file path is accessible.
-   * Returns the file object with the path.
-   */
-  public function checkFile($path) {
-    $item = $this->checkItem($path);
-    if ($item && $item->type === 'file') {
-      return $item;
-    }
-  }
-
-  /**
-   * Checks the existence of a user provided item path.
-   * Scans the parent folder and returns the item object if it is accessible.
-   */
-  public function checkItem($path) {
-    if ($parts = Imce::splitPath($path)) {
-      if ($folder = $this->checkFolder($parts[0])) {
-        return $folder->checkItem($parts[1]);
-      }
-    }
-  }
-
-  /**
-   * Creates and returns an imce file/folder object by name.
-   */
-  public function createItem($type, $name, $conf = NULL) {
-    $item = $type === 'folder' ? new ImceFolder($name, $conf) : new ImceFile($name);
-    $item->setFm($this);
-    return $item;
-  }
-
-  /**
-   * Creates an uri from a relative path.
-   */
-  public function createUri($path) {
-    return Imce::joinPaths($this->getConf('root_uri'), $path);
-  }
-
-  /**
-   * Returns the current operation in the request.
-   */
-  public function getOp() {
-    return $this->getPost('jsop');
-  }
-
-  /**
-   * Returns value of a posted parameter.
-   */
-  public function getPost($key, $default = NULL) {
-    return $this->request ? $this->request->request->get($key, $default) : $default;
-  }
-
-  /**
-   * Returns a configuration option.
-   */
-  public function getConf($key, $default = NULL) {
-    return isset($this->conf[$key]) ? $this->conf[$key] : $default;
-  }
-
-  /**
-   * Sets a configuration option.
-   */
-  public function setConf($key, $value) {
-    $this->conf[$key] = $value;
-  }
-
-  /**
-   * Checks if a permission exists in any of the predefined folders.
-   */
-  public function hasPermission($permission) {
-    return Imce::permissionInConf($permission, $this->conf);
-  }
-
-  /**
-   * Returns the contents of a directory.
-   */
-  public function scanDir($diruri, array $options = []) {
-    $options += ['name_filter' => $this->getNameFilter()];
-    $scanner = $this->getConf('scanner', 'Drupal\imce\Imce::scanDir');
-    return call_user_func($scanner, $diruri, $options);
-  }
-
-  /**
-   * Returns name filtering regexp.
-   */
-  public function getNameFilter() {
-    return Imce::nameFilterInConf($this->conf);
-  }
-
-  /**
-   * Returns currently selected items.
-   */
-  public function getSelection() {
-    return $this->selection;
-  }
-
-  /**
-   * Returns selected items grouped by parent folder path.
-   */
-  public function groupSelection() {
-    return $this->groupItems($this->selection);
-  }
-
-  /**
-   * Groups the items by parent path and type.
-   */
-  public function groupItems(array $items) {
-    $group = [];
-    foreach ($items as $item) {
-      $path = $item->parent->getPath();
-      $type = $item->type == 'folder' ? 'subfolders' : 'files';
-      $group[$path][$type][$item->name] = $item;
-    }
-    return $group;
-  }
-
-  /**
-   * Selects an item.
-   */
-  public function selectItem(ImceItem $item) {
-    if (!$item->selected && $item->parent) {
-      $item->selected = TRUE;
-      $this->selection[] = $item;
-    }
-  }
-
-  /**
-   * Deselects an item.
-   */
-  public function deselectItem(ImceItem $item) {
-    if ($item->selected) {
-      $item->selected = FALSE;
-      $index = array_search($item, $this->selection);
-      if ($index !== FALSE) {
-        array_splice($this->selection, $index, 1);
-      }
-    }
-  }
-
-  /**
-   * Add an item to the response.
-   */
-  public function addItemToJs(ImceItem $item) {
-    if ($parent = $item->parent) {
-      if ($path = $parent->getPath()) {
-        $name = $item->name;
-        $uri = $item->getUri();
-        if ($item->type === 'folder') {
-          $this->response['added'][$path]['subfolders'][$name] = $this->getFolderProperties($uri);
-        }
-        else {
-          $this->response['added'][$path]['files'][$name] = $this->getFileProperties($uri);
-        }
-      }
-    }
-  }
-
-  /**
-   * Sets an item as removed in the response.
-   */
-  public function removeItemFromJs(ImceItem $item) {
-    $this->removePathFromJs($item->getPath());
-  }
-
-  /**
-   * Sets a path as removed in the response.
-   */
-  public function removePathFromJs($path) {
-    if (isset($path)) {
-      $this->response['removed'][] = $path;
-    }
-  }
-
-  /**
-   * Returns js properties of a file.
-   */
-  public function getFileProperties($uri) {
-    $properties = ['date' => filemtime($uri), 'size' => filesize($uri)];
-    if (preg_match('/\.(jpe?g|png|gif)$/i', $uri) && $info = getimagesize($uri)) {
-      $properties['width'] = $info[0];
-      $properties['height'] = $info[1];
-    }
-    return $properties;
-  }
-
-  /**
-   * Returns js properties of a folder.
-   */
-  public function getFolderProperties($uri) {
-    return ['date' => filemtime($uri)];
-  }
-
-  /**
-   * Returns the response data.
-   */
-  public function getResponse() {
-    $defaults = ['jsop' => $this->getOp()];
-    if ($messages = $this->getMessages()) {
-      $defaults['messages'] = $messages;
-    }
-    if ($folder = $this->activeFolder) {
-      $defaults['active_path'] = $folder->getPath();
-    }
-    return $this->response + $defaults;
-  }
-
-  /**
-   * Adds response data.
-   */
-  public function addResponse($key, $value) {
-    return $this->response[$key] = $value;
-  }
-
-  /**
-   * Returns the status messages.
-   */
-  public function getMessages() {
-    // Get drupal messages
-    $messages = drupal_get_messages();
-    foreach ($messages as &$group) {
-      foreach ($group as &$message) {
-        $message = $message instanceof MarkupInterface ? $message . '' : Html::escape($message);
-      }
-    }
-    // Merge with file manager messages.
-    return array_merge_recursive($messages, $this->messages);
-  }
-
-  /**
-   * Sets a status message.
-   */
-  public function setMessage($message, $type = 'error') {
-    $this->messages[$type][] = $message;
-  }
-
-  /**
-   * Checks parent folder permissions of the given items.
-   */
-  public function validatePermissions(array $items, $file_perm = NULL, $subfolder_perm = NULL) {
-    foreach ($this->groupItems($items) as $path => $content) {
-      $parent = $this->getFolder($path);
-      // Parent contains files but does not have the file permission
-      if (!empty($content['files'])) {
-        if (!isset($file_perm) || !$parent->getPermission($file_perm)) {
-          return FALSE;
-        }
-      }
-      // Parent contains subfolders but does not have the subfolder permission
-      if (!empty($content['subfolders'])) {
-        if (!isset($subfolder_perm) || !$parent->getPermission($subfolder_perm)) {
-          return FALSE;
-        }
-      }
-    }
-    return TRUE;
-  }
-
-  /**
-   * Checks the existence of a predefined path.
-   */
-  public function validatePredefinedPath(array $items, $silent = FALSE) {
-    foreach ($items as $item) {
-      if ($item->type === 'folder' && ($folder = $item->hasPredefinedPath())) {
-        if (!$silent) {
-          $this->setMessage(t('%path is a predefined path and can not be modified.', ['%path' => $folder->getPath()]));
-        }
-        return FALSE;
-      }
-    }
-    return TRUE;
-  }
-
-  /**
-   * Validates a file name.
-   */
-  public function validateFileName($filename, $silent = FALSE) {
-    // Basic validation.
-    if ($filename === '.' || $filename === '..' || !($len = strlen($filename)) || $len > 240) {
-      return FALSE;
-    }
-    // Test name filters.
-    if ($name_filter = $this->getNameFilter()) {
-      if (preg_match($name_filter, $filename)) {
-        if (!$silent) {
-          $this->setMessage(t('%filename is not allowed.', ['%filename' => $filename]));
-        }
-        return FALSE;
-      }
-    }
-    // Test chars forbidden in various operating systems.
-    if (preg_match('@^\s|\s$|[/\\\\:\*\?"<>\|\x00-\x1F]@', $filename)) {
-      if (!$silent) {
-        $this->setMessage(t('%filename contains invalid characters. Use only alphanumeric characters for better portability.', ['%filename' => $filename]));
-      }
-      return FALSE;
-    }
-    return TRUE;
-  }
-
-  /**
-   * Validates min/max image dimensions.
-   */
-  public function validateDimensions(array $items, $width, $height, $silent = FALSE) {
-    // Check min dimensions
-    if ($width < 1 || $height < 1) {
-      return FALSE;
-    }
-    // Check max dimensions.
-    $maxwidth = $this->getConf('maxwidth');
-    $maxheight = $this->getConf('maxheight');
-    if ($maxwidth && $width > $maxwidth || $maxheight && $height > $maxheight) {
-      if (!$silent) {
-        $this->setMessage(t('Image dimensions must be smaller than %dimensions pixels.', ['%dimensions' => $maxwidth . 'x' . $maxwidth]));
-      }
-      return FALSE;
-    }
-    return TRUE;
-  }
-
-  /**
-   * Checks if all the selected items are images.
-   */
-  public function validateImageTypes(array $items, $silent = FALSE) {
-    $regex = '/\.(' . preg_replace('/ +/', '|', preg_quote(trim($this->getConf('image_extensions', 'jpg jpeg png gif')))) . ')$/i';
-    foreach ($items as $item) {
-      if ($item->type === 'folder' || !preg_match($regex, $item->name)) {
-        if (!$silent) {
-          $this->setMessage(t('%name is not an image.', ['%name' => $item->name]));
-        }
-        return FALSE;
-      }
-    }
-    return TRUE;
-  }
-
-  /**
-   * Builds file manager page.
-   */
-  public function buildPage() {
-    $page = [];
-    $page['#attached']['library'][] = 'imce/drupal.imce';
-    // Add meta for robots.
-    $robots = [
-      '#tag' => 'meta',
-      '#attributes' => [
-        'name' => 'robots',
-        'content' => 'noindex,nofollow',
-      ],
-    ];
-    $page['#attached']['html_head'][] = [$robots, 'robots'];
-    // Disable cache
-    $page['#cache']['max-age'] = 0;
-    // Run builders of available plugins
-    \Drupal::service('plugin.manager.imce.plugin')->buildPage($page, $this);
-    // Add active path to the conf.
-    $conf = $this->conf;
-    if (!isset($conf['active_path'])) {
-      if ($folder = $this->activeFolder) {
-        $conf['active_path'] = $folder->getPath();
-      }
-      elseif ($this->user->isAuthenticated() && $this->request && $path = $this->request->getSession()->get('imce_active_path')) {
-        if ($this->checkFolder($path)) {
-          $conf['active_path'] = $path; 
-        }
-      }
-    }
-    // Set initial messages.
-    if ($messages = $this->getMessages()) {
-      $conf['messages'] = $messages;
-    }
-    $page['#attached']['drupalSettings']['imce'] = $conf;
-    return $page;
-  }
-
-  /**
-   * Builds and renders the file manager page.
-   */
-  public function buildRenderPage() {
-    $page = $this->buildPage();
-    return \Drupal::service('bare_html_page_renderer')->renderBarePage($page, t('File manager'), 'imce_page', ['#show_messages' => FALSE])->getContent();
-  }
-
-  /**
-   * Returns a page response based on the current request.
-   */
-  public function pageResponse() {
-    if ($request = $this->request) {
-      // Json request
-      if ($request->request->has('jsop')) {
-        $this->run();
-        $data = $this->getResponse();
-        // Return html response if the flag is set.
-        if ($request->request->get('return_html')) {
-          return new Response('<html><body><textarea>' . Json::encode($data)  . '</textarea></body></html>');
-        }
-        return new JsonResponse($data);
-      }
-      // Build and render the main page.
-      return new Response($this->buildRenderPage());
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/web/modules/imce/src/ImceFile.php b/web/modules/imce/src/ImceFile.php
deleted file mode 100644
index 6d6493960e62058f3407a9cf6e268b9f7af33663..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImceFile.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-/**
- * Imce File.
- */
-class ImceFile extends ImceItem {
-
-  /**
-   * {@inheritdoc}
-   */
-  public $type = 'file';
-}
\ No newline at end of file
diff --git a/web/modules/imce/src/ImceFileField.php b/web/modules/imce/src/ImceFileField.php
deleted file mode 100644
index fe3286c6154dd812484b10eabfbef127312e486e..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImceFileField.php
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Field\WidgetInterface;
-use Drupal\Core\Url;
-
-/**
- * Defines methods for integrating Imce into file field widgets.
- */
-class ImceFileField {
-
-  /**
-   * Returns a list of supported widgets.
-   */
-  public static function supportedWidgets() {
-    $widgets = &drupal_static(__FUNCTION__);
-    if (!isset($widgets)) {
-      $widgets = ['file_generic', 'image_image'];
-      \Drupal::moduleHandler()->alter('imce_supported_widgets', $widgets);
-      $widgets = array_unique($widgets);
-    }
-    return $widgets;
-  }
-
-  /**
-   * Checks if a widget is supported.
-   */
-  public static function isWidgetSupported(WidgetInterface $widget) {
-    return in_array($widget->getPluginId(), static::supportedWidgets());
-  }
-
-  /**
-   * Returns widget settings form.
-   */
-  public static function widgetSettingsForm(WidgetInterface $widget) {
-    $form = [];
-    if (static::isWidgetSupported($widget)) {
-      $form['enabled'] = [
-        '#type' => 'checkbox',
-        '#title' => t('Allow users to select files from <a href=":url">Imce File Manager</a> for this field.', [':url' => Url::fromRoute('imce.admin')->toString()]),
-        '#default_value' => $widget->getThirdPartySetting('imce', 'enabled'),
-      ];
-    }
-    return $form;
-  }
-
-  /**
-   * Alters the summary of widget settings form.
-   */
-  public static function alterWidgetSettingsSummary(&$summary, $context) {
-    $widget = $context['widget'];
-    if (static::isWidgetSupported($widget)) {
-      $status = $widget->getThirdPartySetting('imce', 'enabled') ? t('Yes') : t('No');
-      $summary[] = t('Imce enabled: @status', ['@status' => $status]);
-    }
-  }
-
-  /**
-   * Processes widget form.
-   */
-  public static function processWidget($element, FormStateInterface $form_state, $form) {
-    // Path input
-    $element['imce_paths'] = [
-      '#type' => 'hidden',
-      '#attributes' => [
-        'class' => ['imce-filefield-paths'],
-        'data-imce-url' => Url::fromRoute('imce.page', ['scheme' => $element['#scheme']])->toString(),
-      ],
-      // Reset value to prevent consistent errors
-      '#value' => '',
-    ];
-    // Library
-    $element['#attached']['library'][] = 'imce/drupal.imce.filefield';
-    // Set the pre-renderer to conditionally disable the elements.
-    $element['#pre_render'][] = [get_called_class(), 'preRenderWidget'];
-    return $element;
-  }
-
-  /**
-   * Pre-renders widget form.
-   */
-  public static function preRenderWidget($element) {
-    // Hide elements if there is already an uploaded file.
-    if (!empty($element['#value']['fids'])) {
-      $element['imce_paths']['#access'] = FALSE;
-    }
-    return $element;
-  }
-
-  /**
-   * Sets widget file id values by validating and processing the submitted data.
-   * Runs before processor callbacks.
-   */
-  public static function setWidgetValue($element, &$input, FormStateInterface $form_state) {
-    if (empty($input['imce_paths'])) {
-      return;
-    }
-    $paths = $input['imce_paths'];
-    $input['imce_paths'] = '';
-    // Remove excess data.
-    $paths = array_unique(array_filter(explode(':', $paths)));
-    if (isset($element['#cardinality']) && $element['#cardinality'] > -1) {
-      $paths = array_slice($paths, 0, $element['#cardinality']);
-    }
-    // Check if paths are accessible by the current user with Imce.
-    if (!$paths = Imce::accessFilePaths($paths, \Drupal::currentUser(), $element['#scheme'])) {
-      return;
-    }
-    // Validate paths as file entities.
-    $file_usage = \Drupal::service('file.usage');
-    $errors = [];
-    foreach ($paths as $path) {
-      // Get entity by uri
-      $file = Imce::getFileEntity($element['#scheme'] . '://' . $path, TRUE);
-      if ($new_errors = file_validate($file, $element['#upload_validators'])) {
-        $errors = array_merge($errors, $new_errors);
-      }
-      else {
-        // Save the file record.
-        if ($file->isNew()) {
-          $file->save();
-        }
-        if ($fid = $file->id()) {
-          // Make sure the file has usage otherwise it will be denied.
-          if (!$file_usage->listUsage($file)) {
-            $file_usage->add($file, 'imce', 'file', $fid);
-          }
-          $input['fids'][] = $fid;
-        }
-      }
-    }
-    // Set error messages.
-    if ($errors) {
-      $errors = array_unique($errors);
-      if (count($errors) > 1) {
-        $errors = ['#theme' => 'item_list', '#items' => $errors];
-        $message = \Drupal::service('renderer')->render($errors);
-      }
-      else {
-        $message = array_pop($errors);
-      }
-      // May break the widget flow if set as a form error.
-      drupal_set_message($message, 'error');
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/web/modules/imce/src/ImceFolder.php b/web/modules/imce/src/ImceFolder.php
deleted file mode 100644
index dd20e3cc6751581210a3d01b7fd528149ba58641..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImceFolder.php
+++ /dev/null
@@ -1,262 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-/**
- * Imce Folder.
- */
-class ImceFolder extends ImceItem {
-
-  /**
-   * {@inheritdoc}
-   */
-  public $type = 'folder';
-
-  /**
-   * Inheritable folder configuration including permissions.
-   *
-   * @var array
-   */
-  public $conf;
-
-  /**
-   * Scan status.
-   *
-   * @var boolean
-   */
-  public $scanned;
-
-  /**
-   * Items.
-   *
-   * @var array
-   */
-  public $items = [];
-
-  /**
-   * Files.
-   *
-   * @var array
-   */
-  public $files = [];
-
-  /**
-   * Subfolders.
-   *
-   * @var array
-   */
-  public $subfolders = [];
-
-  /**
-   * Constructs the folder.
-   *
-   * @param string $name
-   *   Folder name.
-   * @param array $conf
-   *   Folder configuration.
-   */
-  public function __construct($name, array $conf = NULL) {
-    parent::__construct($name);
-    $this->setConf($conf);
-  }
-
-  /**
-   * Returns folder configuration.
-   */
-  public function getConf() {
-    if (isset($this->conf)) {
-      return $this->conf;
-    }
-    // Inherit parent conf
-    if ($parent = $this->parent) {
-      if ($conf = $parent->getConf()) {
-        if (Imce::permissionInFolderConf('browse_subfolders', $conf)) {
-          return $conf + ['inherited' => TRUE];
-        }
-      }
-    }
-  }
-
-  /**
-   * Sets folder configuration.
-   */
-  public function setConf(array $conf = NULL) {
-    $this->conf = $conf;
-  }
-
-  /**
-   * Returns a permission value.
-   */
-  public function getPermission($name) {
-    return Imce::permissionInFolderConf($name, $this->getConf());
-  }
-
-  /**
-   * Sets the folder path.
-   */
-  public function setPath($path) {
-    $oldpath = $this->path;
-    if ($path !== $oldpath) {
-      // Remove oldpath references
-      if (isset($oldpath)) {
-        unset($this->fm()->tree[$oldpath]);
-        foreach ($this->subfolders as $name => $item) {
-          $item->setPath(NULL);
-        }
-      }
-      // Add new path references
-      $this->path = $path;
-      if (isset($path)) {
-        $this->fm()->tree[$path] = $this;
-        foreach ($this->subfolders as $name => $item) {
-          $item->setPath(Imce::joinPaths($path, $name));
-        }
-      }
-    }
-  }
-
-  /**
-   * Returns an item by name.
-   */
-  public function getItem($name) {
-    if (isset($this->items[$name])) {
-      $item = $this->items[$name];
-      if (!is_object($item)) {
-        $item = isset($this->subfolders[$name]) ? $this->addSubfolder($name) : $this->addFile($name);
-      }
-      return $item;
-    }
-  }
-
-  /**
-   * Returns an item by name.
-   * Scans the folder if needed.
-   */
-  public function checkItem($name) {
-    if (!$item = $this->getItem($name)) {
-      if (!$this->scanned) {
-        $this->scan();
-        $item = $this->getItem($name);
-      }
-    }
-    return $item;
-  }
-
-  /**
-   * Appends an item to the item list.
-   */
-  public function appendItem(ImceItem $item) {
-    $parent = $item->parent;
-    if ($item !== $this && $parent !== $this) {
-      if ($parent) {
-        $parent->removeItem($item);
-      }
-      $item->parent = $this;
-      $name = $item->name;
-      $this->items[$name] = $item;
-      if ($item->type === 'folder') {
-        $this->subfolders[$name] = $item;
-        $path = ($this->parent ? $this->getPath() . '/' : '') . $name;
-        $item->setPath($path);
-      }
-      else {
-        $this->files[$name] = $item;
-      }
-    }
-    return $item;
-  }
-
-  /**
-   * Removes an item from the item list.
-   */
-  public function removeItem(ImceItem $item) {
-    if ($this === $item->parent) {
-      $item->deselect();
-      $item->parent = NULL;
-      $name = $item->name;
-      unset($this->items[$name]);
-      if ($item->type === 'folder') {
-        unset($this->subfolders[$name]);
-        $item->setPath(NULL);
-      }
-      else {
-        unset($this->files[$name]);
-      }
-      return $item;
-    }
-  }
-
-  /**
-   * Creates and returns a child file/folder object by name.
-   */
-  public function createItem($type, $name, $conf = NULL) {
-    $item = $this->fm()->createItem($type, $name, $conf);
-    $this->appendItem($item);
-    return $item;
-  }
-
-  /**
-   * Adds a file by name.
-   */
-  public function addFile($name) {
-    return $this->createItem('file', $name);
-  }
-
-  /**
-   * Adds a subfolder by name.
-   */
-  public function addSubfolder($name, $conf = NULL) {
-    return $this->createItem('folder', $name, $conf);
-  }
-
-  /**
-   * Checks if the folder is predefined.
-   */
-  public function isPredefined() {
-    return isset($this->conf);
-  }
-
-  /**
-   * Returns the first predefined descendent including itself.
-   */
-  public function hasPredefinedPath() {
-    if ($this->isPredefined()) {
-      return $this;
-    }
-    foreach ($this->subfolders as $folder) {
-      if ($folder = $folder->hasPredefinedPath()) {
-        return $folder;
-      }
-    }
-    return FALSE;
-  }
-
-  /**
-   * Scans folder content.
-   */
-  public function scan() {
-    if (!$this->scanned) {
-      $this->scanned = TRUE;
-      $options = [
-        'browse_files' => $this->getPermission('browse_files'),
-        'browse_subfolders' => $this->getPermission('browse_subfolders'),
-      ];
-      $content = $this->fm()->scanDir($this->getUri(), $options);
-      // Add files as raw data. We create the objects when needed.
-      $this->files = $this->items = $content['files'];
-      // Create the subfolder objects.
-      $subfolders = $this->subfolders;
-      $this->subfolders = [];
-      foreach ($content['subfolders'] as $name => $uri) {
-        // Check if previously created
-        if (isset($subfolders[$name]) && is_object($subfolders[$name])) {
-          $this->subfolders[$name] = $this->items[$name] = $subfolders[$name];
-        }
-        else {
-          $this->addSubfolder($name);
-        }
-      }
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/web/modules/imce/src/ImceItem.php b/web/modules/imce/src/ImceItem.php
deleted file mode 100644
index 9549fff22c78b0b5fbb2555e4f5618c7ddf613fa..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImceItem.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-/**
- * Imce Item.
- */
-abstract class ImceItem {
-
-  /**
-   * Item type
-   *
-   * @var string
-   */
-  public $type;
-
-  /**
-   * Item name.
-   *
-   * @var string
-   */
-  public $name;
-
-  /**
-   * Selected status.
-   *
-   * @var boolean
-   */
-  public $selected;
-
-  /**
-   * Item parent.
-   *
-   * @var \Drupal\imce\ImceFolder
-   */
-  public $parent;
-
-  /**
-   * File manager
-   *
-   * @var \Drupal\imce\ImceFM
-   */
-  protected $fm;
-
-  /**
-   * Item path relative to the root.
-   *
-   * @var string
-   */
-  protected $path;
-
-  /**
-   * Constructs the item.
-   *
-   * @param string $name
-   *   Item name.
-   */
-  public function __construct($name) {
-    $this->name = $name;
-  }
-
-  /**
-   * Returns the file manager.
-   */
-  public function fm() {
-    return $this->fm;
-  }
-
-  /**
-   * Sets the file manager.
-   */
-  public function setFm(ImceFM $fm) {
-    $this->fm = $fm;
-  }
-
-  /**
-   * Returns the item path relative to the root.
-   */
-  public function getPath() {
-    if (isset($this->path)) {
-      return $this->path;
-    }
-    if ($this->parent) {
-      $path = $this->parent->getPath();
-      if (isset($path)) {
-        return Imce::joinPaths($path, $this->name);
-      }
-    }
-  }
-
-  /**
-   * Returns the item uri.
-   */
-  public function getUri() {
-    $path = $this->getPath();
-    if (isset($path)) {
-      return $this->fm()->createUri($path);
-    }
-  }
-
-  /**
-   * Selects the item.
-   */
-  public function select() {
-    $this->fm()->selectItem($this);
-  }
-
-  /**
-   * Deselects the item.
-   */
-  public function deselect() {
-    $this->fm()->deselectItem($this);
-  }
-
-  /**
-   * Removes the item from its parent.
-   */
-  public function remove() {
-    if ($this->parent) {
-      $this->parent->removeItem($this);
-    }
-  }
-
-  /**
-   * Removes the item from js.
-   */
-  public function removeFromJs() {
-    $this->fm()->removeItemFromJs($this);
-  }
-
-  /**
-   * Adds the item to js.
-   */
-  public function addToJs() {
-    $this->fm()->addItemToJs($this);
-  }
-
-}
\ No newline at end of file
diff --git a/web/modules/imce/src/ImcePluginBase.php b/web/modules/imce/src/ImcePluginBase.php
deleted file mode 100644
index 46ffdc0a8ec8b21a0ce46ec97107b4ee1f4aca9d..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImcePluginBase.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-use Drupal\Core\Plugin\PluginBase;
-use Drupal\Core\Session\AccountProxyInterface;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\imce\Entity\ImceProfile;
-
-/**
- * Defines a base Imce plugin implementation.
- *
- * @see \Drupal\imce\ImcePluginInterface
- * @see \Drupal\imce\ImcePluginManager
- * @see plugin_api
- */
-abstract class ImcePluginBase extends PluginBase implements ImcePluginInterface {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function permissionInfo() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) {
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function validateProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) {
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function processUserConf(array &$conf, AccountProxyInterface $user) {
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildPage(array &$page, ImceFM $fm) {
-  }
-}
diff --git a/web/modules/imce/src/ImcePluginInterface.php b/web/modules/imce/src/ImcePluginInterface.php
deleted file mode 100644
index 3910f2659b886d9270b3f7a6c4ea82283c751d31..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImcePluginInterface.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-use Drupal\Component\Plugin\PluginInspectionInterface;
-use Drupal\Core\Session\AccountProxyInterface;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\imce\Entity\ImceProfile;
-
-/**
- * Defines an interface for Imce plugins.
- *
- * @see \Drupal\imce\ImcePluginBase
- * @see \Drupal\imce\ImcePluginManager
- * @see plugin_api
- */
-interface ImcePluginInterface extends PluginInspectionInterface {
-
-  /**
-   * Returns folder permission definitions.
-   *
-   * @return array
-   *   An array of id:label pairs.
-   */
-  public function permissionInfo();
-
-  /**
-   * Alters entity form of an Imce Profile.
-   */
-  public function alterProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile);
-
-  /**
-   * Validates entity form of an Imce Profile.
-   */
-  public function validateProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile);
-
-  /**
-   * Processes profile configuration for a user.
-   */
-  public function processUserConf(array &$conf, AccountProxyInterface $user);
-
-  /**
-   * Builds imce page by adding required libraries and elements.
-   */
-  public function buildPage(array &$page, ImceFM $fm);
-}
diff --git a/web/modules/imce/src/ImcePluginManager.php b/web/modules/imce/src/ImcePluginManager.php
deleted file mode 100644
index 31cbc001d44483c544d93b128506634beb71b7f4..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImcePluginManager.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-use Drupal\Core\Plugin\DefaultPluginManager;
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Session\AccountProxyInterface;
-use Drupal\imce\Entity\ImceProfile;
-
-/**
- * Provides a plugin manager for Imce Plugins.
- *
- * @see \Drupal\imce\ImcePluginInterface
- * @see \Drupal\imce\ImcePluginBase
- * @see \Drupal\imce\Annotation\ImcePlugin
- * @see plugin_api
- */
-class ImcePluginManager extends DefaultPluginManager {
-
-  /**
-   * Available plugin hooks.
-   *
-   * @var array
-   */
-  protected $hooks;
-
-  /**
-   * Available plugin instances.
-   *
-   * @var array
-   */
-  public $instances;
-
-  /**
-   * Constructs an ImcePluginManager object.
-   *
-   * @param \Traversable $namespaces
-   *   An object that implements \Traversable which contains the root paths
-   *   keyed by the corresponding namespace to look for plugin implementations.
-   * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
-   *   Cache backend instance to use.
-   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
-   *   The module handler to invoke the alter hook with.
-   */
-  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
-    parent::__construct('Plugin/ImcePlugin', $namespaces, $module_handler, 'Drupal\imce\ImcePluginInterface', 'Drupal\imce\Annotation\ImcePlugin');
-    $this->alterInfo('imce_plugin_info');
-    $this->setCacheBackend($cache_backend, 'imce_plugins');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function findDefinitions() {
-    $definitions = parent::findDefinitions();
-    // Sort definitions by weight
-    uasort($definitions, ['Drupal\Component\Utility\SortArray', 'sortByWeightElement']);
-    return $definitions;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getInstance(array $options) {
-    if (isset($options['id']) && $id = $options['id']) {
-      return isset($this->instances[$id]) ? $this->instances[$id] : $this->createInstance($id);
-    }
-  }
-
-  /**
-   * Returns all available plugin instances.
-   *
-   * @return array
-   *   A an array plugin intances.
-   */
-  public function getInstances() {
-    if (!isset($this->instances)) {
-      $this->instances = [];
-      foreach ($this->getDefinitions() as $id => $def) {
-        $this->instances[$id] = $this->createInstance($id);
-      }
-    }
-    return $this->instances;
-  }
-
-  /**
-   * Returns available hooks.
-   *
-   * @return array
-   *   An array of method names defined by plugin interface.
-   */
-  public function getHooks() {
-    if (!isset($this->hooks)) {
-      $this->hooks = get_class_methods('Drupal\imce\ImcePluginInterface');
-    }
-    return $this->hooks;
-  }
-
-  /**
-   * Invokes a hook in all available plugins.
-   *
-   * @return array
-   *   An array of results keyed by plugin id.
-   */
-  public function invokeAll($hook, &$a = NULL, $b = NULL, $c = NULL) {
-    $ret = [];
-    if (in_array($hook, $this->getHooks())) {
-      foreach ($this->getInstances() as $plugin => $instance) {
-        $ret[$plugin] = $instance->$hook($a, $b, $c);
-      }
-    }
-    return $ret;
-  }
-
-  /**
-   * Returns folder permission definitions.
-   */
-  public function permissionInfo() {
-    return call_user_func_array('array_merge', array_filter($this->invokeAll('permissionInfo')));
-  }
-
-  /**
-   * Alters an Imce Profile form.
-   */
-  public function alterProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) {
-    return $this->invokeAll('alterProfileForm', $form, $form_state, $imce_profile);
-  }
-
-  /**
-   * Validates an Imce Profile form.
-   */
-  public function validateProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) {
-    return $this->invokeAll('validateProfileForm', $form, $form_state, $imce_profile);
-  }
-
-  /**
-   * Processes profile configuration for a user.
-   */
-  public function processUserConf(array &$conf, AccountProxyInterface $user) {
-    return $this->invokeAll('processUserConf', $conf, $user);
-  }
-
-  /**
-   * Builds imce page.
-   */
-  public function buildPage(array &$page, ImceFM $fm) {
-    return $this->invokeAll('buildPage', $page, $fm);
-  }
-
-  /**
-   * Runs an operation handler for the file manager.
-   */
-  public function handleOperation($op, ImceFM $fm) {
-    $plugin = $method = FALSE;
-    foreach ($this->getDefinitions() as $p => $def) {
-      if (!empty($def['operations'][$op])) {
-        $plugin = $p;
-        $method = $def['operations'][$op];
-      }
-    }
-    if ($method && $instance = $this->getInstance(['id' => $plugin])) {
-      return $instance->$method($fm);
-    }
-    // Indicate that the operation handler is not found.
-    return FALSE;
-  }
-}
\ No newline at end of file
diff --git a/web/modules/imce/src/ImceProfileListBuilder.php b/web/modules/imce/src/ImceProfileListBuilder.php
deleted file mode 100644
index 9ec6cd5fe25a3611b00d3d243a0c78b4f2015dde..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/ImceProfileListBuilder.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-namespace Drupal\imce;
-
-use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Defines a class to build a list of Imce Profile entities.
- *
- * @see \Drupal\imce\Entity\ImceProfile
- */
-class ImceProfileListBuilder extends ConfigEntityListBuilder {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildHeader() {
-    $header['label'] = $this->t('Name');
-    $header['description'] = $this->t('Description');
-    return $header + parent::buildHeader();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildRow(EntityInterface $imce_profile) {
-    $row['label'] = $imce_profile->label();
-    $row['description'] = $imce_profile->get('description');
-    return $row + parent::buildRow($imce_profile);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDefaultOperations(EntityInterface $imce_profile) {
-    $operations = parent::getDefaultOperations($imce_profile);
-    $operations['duplicate'] = [
-      'title' => t('Duplicate'),
-      'weight' => 15,
-      'url' => $imce_profile->toUrl('duplicate-form'),
-    ];
-    return $operations;
-  }
-
-}
diff --git a/web/modules/imce/src/Plugin/BUEditorPlugin/Imce.php b/web/modules/imce/src/Plugin/BUEditorPlugin/Imce.php
deleted file mode 100644
index 68ebf7db0eb0babafa2078721c075ac50acd95dc..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Plugin/BUEditorPlugin/Imce.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace Drupal\imce\Plugin\BUEditorPlugin;
-
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\editor\Entity\Editor;
-use Drupal\bueditor\BUEditorPluginBase;
-use Drupal\bueditor\Entity\BUEditorEditor;
-use Drupal\imce\Imce as ImceMain;
-
-/**
- * Defines Imce as a BUEditor plugin.
- *
- * @BUEditorPlugin(
- *   id = "imce",
- *   label = "Imce File Manager"
- * )
- */
-class Imce extends BUEditorPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterEditorJS(array &$js, BUEditorEditor $bueditor_editor, Editor $editor = NULL) {
-    // Check selected file browser.
-    if (isset($js['settings']['fileBrowser']) && $js['settings']['fileBrowser'] === 'imce') {
-      // Check access
-      if (ImceMain::access()) {
-        $js['libraries'][] = 'imce/drupal.imce.bueditor';
-      }
-      else {
-        unset($js['settings']['fileBrowser']);
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterEditorForm(array &$form, FormStateInterface $form_state, BUEditorEditor $bueditor_editor) {
-    // Add imce option to file browser field.
-    $fb = &$form['settings']['fileBrowser'];
-    $fb['#options']['imce'] = $this->t('Imce File Manager');
-    // Add configuration link
-    $form['settings']['imce'] = [
-      '#type' => 'container',
-      '#states' => [
-        'visible' => [':input[name="settings[fileBrowser]"]' => ['value' => 'imce']],
-      ],
-      '#attributes' => [
-        'class' => ['description'],
-      ],
-      'content' => [
-        '#markup' => $this->t('Configure <a href=":url">Imce File Manager</a>.', [':url' => Url::fromRoute('imce.admin')->toString()]),
-      ],
-    ];
-    // Set weight
-    if (isset($fb['#weight'])) {
-      $form['settings']['imce']['#weight'] = $fb['#weight'] + 0.1;
-    }
-  }
-
-}
diff --git a/web/modules/imce/src/Plugin/CKEditorPlugin/Imce.php b/web/modules/imce/src/Plugin/CKEditorPlugin/Imce.php
deleted file mode 100644
index ec63c96d5fe09d1ed2ab6b20af5e3b3c9d923859..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Plugin/CKEditorPlugin/Imce.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-namespace Drupal\imce\Plugin\CKEditorPlugin;
-
-use Drupal\editor\Entity\Editor;
-use Drupal\ckeditor\CKEditorPluginBase;
-
-/**
- * Defines Imce plugin for CKEditor.
- *
- * @CKEditorPlugin(
- *   id = "imce",
- *   label = "Imce File Manager"
- * )
- */
-class Imce extends CKEditorPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  function getDependencies(Editor $editor) {
-    // Need drupalimage for drupallink support. See #2666596
-    return ['drupalimage'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFile() {
-    return drupal_get_path('module', 'imce') . '/js/plugins/ckeditor/imce.ckeditor.js';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getButtons() {
-    return [
-      'ImceImage' => [
-        'label' => t('Insert images using Imce File Manager'),
-        'image' => $this->imageIcon(),
-      ],
-      'ImceLink' => [
-        'label' => t('Insert file links using Imce File Manager'),
-        'image' => $this->linkIcon(),
-      ],
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfig(Editor $editor) {
-    return [
-      'ImceImageIcon' => file_create_url($this->imageIcon()),
-      'ImceLinkIcon' => file_create_url($this->linkIcon()),
-    ];
-  }
-
-  /**
-   * Returns image icon path.
-   * Uses the icon from drupalimage plugin.
-   */
-  public function imageIcon() {
-    return drupal_get_path('module', 'imce') . '/js/plugins/ckeditor/icons/imceimage.png';
-  }
-
-  /**
-   * Returns link icon path.
-   * Uses the icon from drupallink plugin.
-   */
-  public function linkIcon() {
-    return drupal_get_path('module', 'imce') . '/js/plugins/ckeditor/icons/imcelink.png';
-  }
-
-}
diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Core.php b/web/modules/imce/src/Plugin/ImcePlugin/Core.php
deleted file mode 100644
index 9bb49a5b1f62dbaeb4eeab6f7ebbf205158d6dfb..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Plugin/ImcePlugin/Core.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace Drupal\imce\Plugin\ImcePlugin;
-
-use Drupal\imce\ImcePluginBase;
-use Drupal\imce\ImceFM;
-
-/**
- * Defines Imce Core plugin.
- *
- * @ImcePlugin(
- *   id = "core",
- *   label = "Core",
- *   weight = -99,
- *   operations = {
- *     "browse" = "opBrowse",
- *   }
- * )
- */
-class Core extends ImcePluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function permissionInfo() {
-    return [
-      'browse_files' => $this->t('Browse files'),
-      'browse_subfolders' => $this->t('Browse subfolders'),
-    ];
-  }
-
-  /**
-   * Operation handler: browse.
-   */
-  public function opBrowse(ImceFM $fm) {
-    if ($folder = $fm->activeFolder) {
-      $folder->scan();
-      $uri = $folder->getUri();
-      $uri_prefix = substr($uri, -1) === '/' ? $uri : $uri . '/';
-      $content = ['props' => $fm->getFolderProperties($uri)];
-      if ($folder->getPermission('browse_files')) {
-        foreach ($folder->files as $name => $file) {
-          $content['files'][$name] = $fm->getFileProperties($uri_prefix . $name);
-        }
-      }
-      if ($folder->getPermission('browse_subfolders')) {
-        foreach ($folder->subfolders as $name => $subfolder) {
-          $content['subfolders'][$name] = $fm->getFolderProperties($uri_prefix . $name);
-        }
-      }
-      $fm->addResponse('content', $content);
-    }
-  }
-
-}
diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Delete.php b/web/modules/imce/src/Plugin/ImcePlugin/Delete.php
deleted file mode 100644
index 85ab3ec4d819aac381e5e7dbe5cf0cc212f29376..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Plugin/ImcePlugin/Delete.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-namespace Drupal\imce\Plugin\ImcePlugin;
-
-use Drupal\imce\Imce;
-use Drupal\imce\ImcePluginBase;
-use Drupal\imce\ImceFM;
-
-/**
- * Defines Imce Delete plugin.
- *
- * @ImcePlugin(
- *   id = "delete",
- *   label = "Delete",
- *   weight = -5,
- *   operations = {
- *     "delete" = "opDelete"
- *   }
- * )
- */
-class Delete extends ImcePluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function permissionInfo() {
-    return [
-      'delete_files' => $this->t('Delete files'),
-      'delete_subfolders' => $this->t('Delete subfolders'),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildPage(array &$page, ImceFM $fm) {
-    // Check if delete permission exists
-    if ($fm->hasPermission('delete_files') || $fm->hasPermission('delete_subfolders')) {
-      $page['#attached']['library'][] = 'imce/drupal.imce.delete';
-    }
-  }
-
-  /**
-   * Operation handler: delete.
-   */
-  public function opDelete(ImceFM $fm) {
-    $items = $fm->getSelection();
-    if ($this->validateDelete($fm, $items)) {
-      $this->deleteItems($fm, $items);
-    }
-  }
-
-  /**
-   * Validates the deletion of the given items.
-   */
-  public function validateDelete(ImceFM $fm, array $items) {
-    return $items && $fm->validatePermissions($items, 'delete_files', 'delete_subfolders') && $fm->validatePredefinedPath($items);
-  }
-
-  /**
-   * Deletes a list of imce items and returns succeeded ones.
-   */
-  public function deleteItems(ImceFM $fm, array $items) {
-    $success = [];
-    $ignore_usage = $fm->getConf('ignore_usage', FALSE);
-    foreach ($items as $item) {
-      if ($uri = $item->getUri()) {
-        $result = $item->type === 'folder' ? $this->deleteFolderUri($uri, $ignore_usage, !$item->getPermission('delete_files')) : $this->deleteFileUri($uri, $ignore_usage);
-        if ($result) {
-          $item->removeFromJs();
-          $item->remove();
-          $success[] = $item;
-        }
-      }
-    }
-    return $success;
-  }
-
-  /**
-   * Deletes a file by uri.
-   */
-  public static function deleteFileUri($uri, $ignore_usage = FALSE) {
-    // Managed file
-    if ($file = Imce::getFileEntity($uri)) {
-      if (!$ignore_usage && $usage = \Drupal::service('file.usage')->listUsage($file)) {
-        unset($usage['imce']);
-        if ($usage) {
-          drupal_set_message(t('%filename is in use by another application.', ['%filename' => $file->getFilename()]), 'error');
-          return FALSE;
-        }
-      }
-      $file->delete();
-      return TRUE;
-    }
-    // Unmanaged file
-    return file_unmanaged_delete($uri);
-  }
-
-  /**
-   * Deletes a folder by uri.
-   */
-  public static function deleteFolderUri($uri, $ignore_usage = FALSE, $check_files = FALSE) {
-    // Get folder content without any filtering.
-    $content = Imce::scanDir($uri);
-    if (!empty($content['error'])) {
-      return FALSE;
-    }
-    if ($check_files && !empty($content['files'])) {
-      drupal_set_message(t('%folder contains files and can not be deleted.', ['%folder' => \Drupal::service('file_system')->basename($uri)]), 'error');
-      return FALSE;
-    }
-    // Delete subfolders first.
-    foreach ($content['subfolders'] as $path) {
-      if (!static::deleteFolderUri($path, $ignore_usage, $check_files)) {
-        return FALSE;
-      }
-    }
-    // Delete files.
-    foreach ($content['files'] as $path) {
-      if (!static::deleteFileUri($path, $ignore_usage)) {
-        return FALSE;
-      }
-    }
-    // Recently emptied folders need some refreshing before the removal on windows.
-    if (strncasecmp(PHP_OS, 'WIN', 3) == 0) {
-      @closedir(@opendir($uri));
-    }
-    // Remove the folder
-    return rmdir($uri);
-  }
-
-}
diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Newfolder.php b/web/modules/imce/src/Plugin/ImcePlugin/Newfolder.php
deleted file mode 100644
index 1888a166fb0d28a6c54563bf104ccebaf7034e8b..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Plugin/ImcePlugin/Newfolder.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace Drupal\imce\Plugin\ImcePlugin;
-
-use Drupal\imce\Imce;
-use Drupal\imce\ImcePluginBase;
-use Drupal\imce\ImceFM;
-
-/**
- * Defines Imce New Folder plugin.
- *
- * @ImcePlugin(
- *   id = "newfolder",
- *   label = "New Folder",
- *   weight = -15,
- *   operations = {
- *     "newfolder" = "opNewfolder"
- *   }
- * )
- */
-class Newfolder extends ImcePluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function permissionInfo() {
-    return [
-      'create_subfolders' => $this->t('Create subfolders'),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildPage(array &$page, ImceFM $fm) {
-    if ($fm->hasPermission('create_subfolders')) {
-      $page['#attached']['library'][] = 'imce/drupal.imce.newfolder';
-    }
-  }
-
-  /**
-   * Operation handler: newfolder.
-   */
-  public function opNewfolder(ImceFM $fm) {
-    $folder = $fm->activeFolder;
-    if (!$folder || !$folder->getPermission('create_subfolders')) {
-      return;
-    }
-    // Create folder
-    $name = $fm->getPost('newfolder');
-    if (is_string($name) && $fm->validateFileName($name)) {
-      // Check existence
-      $uri = Imce::joinPaths($folder->getUri(), $name);
-      if (file_exists($uri)) {
-        $fm->setMessage(t('%filename already exists.', ['%filename' => $name]));
-      }
-      // Create and add to js
-      elseif (mkdir($uri, $fm->getConf('chmod_directory', 0775))) {
-        $folder->addSubfolder($name)->addToJs();
-      }
-    }
-  }
-
-}
diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Resize.php b/web/modules/imce/src/Plugin/ImcePlugin/Resize.php
deleted file mode 100644
index a7c42ab4b3bccd03330323b4a70fb273eb813c21..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Plugin/ImcePlugin/Resize.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-namespace Drupal\imce\Plugin\ImcePlugin;
-
-use Drupal\imce\Imce;
-use Drupal\imce\ImcePluginBase;
-use Drupal\imce\ImceFM;
-
-/**
- * Defines Imce Resize plugin.
- *
- * @ImcePlugin(
- *   id = "resize",
- *   label = "Resize",
- *   operations = {
- *     "resize" = "opResize"
- *   }
- * )
- */
-class Resize extends ImcePluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function permissionInfo() {
-    return [
-      'resize_images' => $this->t('Resize images'),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildPage(array &$page, ImceFM $fm) {
-    // Check if resize permission exists
-    if ($fm->hasPermission('resize_images')) {
-      $page['#attached']['library'][] = 'imce/drupal.imce.resize';
-    }
-  }
-
-  /**
-   * Operation handler: resize.
-   */
-  public function opResize(ImceFM $fm) {
-    $width = min(10000, (int) $fm->getPost('width'));
-    $height = min(10000, (int) $fm->getPost('height'));
-    $copy = (bool) $fm->getPost('copy');
-    $items = $fm->getSelection();
-    if ($this->validateResize($fm, $items, $width, $height, $copy)) {
-      $this->resizeItems($fm, $items, $width, $height, $copy);
-    }
-  }
-
-  /**
-   * Validates item resizing.
-   */
-  public function validateResize(ImceFM $fm, array $items, $width, $height, $copy) {
-    return $items && $fm->validateDimensions($items, $width, $height) && $fm->validateImageTypes($items) && $fm->validatePermissions($items, 'resize_images');
-  }
-
-  /**
-   * Resizes a list of imce items and returns succeeded ones.
-   */
-  public function resizeItems(ImceFM $fm, array $items, $width, $height, $copy = FALSE) {
-    $factory = \Drupal::service('image.factory');
-    $fs = \Drupal::service('file_system');
-    $success = [];
-    foreach ($items as $item) {
-      $uri = $item->getUri();
-      $image = $factory->get($uri);
-      // Check vallidity
-      if (!$image->isValid()) {
-        continue;
-      }
-      // Check if resizing is needed.
-      $resize = $image->getWidth() != $width || $image->getHeight() != $height;
-      if (!$resize && !$copy) {
-        continue;
-      }
-      if ($resize && !$image->resize($width, $height)) {
-        continue;
-      }
-      // Save
-      $destination = $copy ? file_create_filename($fs->basename($uri), $fs->dirname($uri)) : $uri;
-      if (!$image->save($destination)) {
-        continue;
-      }
-      // Create a new file record.
-      if ($copy) {
-        $filename = $fs->basename($destination);
-        $values = [
-          'uid' => $fm->user->id(),
-          'status' => 1,
-          'filename' => $filename,
-          'uri' => $destination,
-          'filesize' => $image->getFileSize(),
-          'filemime' => $image->getMimeType(),
-        ];
-        $file = \Drupal::entityTypeManager()->getStorage('file')->create($values);
-        // Check quota
-        if ($errors = file_validate_size($file, 0, $fm->getConf('quota'))) {
-          file_unmanaged_delete($destination);
-          $fm->setMessage($errors[0]);
-        }
-        else {
-          $file->save();
-          // Add imce item
-          $item->parent->addFile($filename)->addToJs();
-        }
-      }
-      // Update existing.
-      else {
-        if ($file = Imce::getFileEntity($uri)) {
-          $file->setSize($image->getFileSize());
-          $file->save();
-        }
-        // Add to js
-        $item->addToJs();
-      }
-      $success[] = $item;
-    }
-    return $success;
-  }
-
-}
diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Upload.php b/web/modules/imce/src/Plugin/ImcePlugin/Upload.php
deleted file mode 100644
index e10fc399b11be122ef6af2a55628303d27fc63bc..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Plugin/ImcePlugin/Upload.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-namespace Drupal\imce\Plugin\ImcePlugin;
-
-use Drupal\file\Entity\FileInterface;
-use Drupal\imce\ImcePluginBase;
-use Drupal\imce\ImceFM;
-
-/**
- * Defines Imce Upload plugin.
- *
- * @ImcePlugin(
- *   id = "upload",
- *   label = "Upload",
- *   weight = -10,
- *   operations = {
- *     "upload" = "opUpload"
- *   }
- * )
- */
-class Upload extends ImcePluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function permissionInfo() {
-    return [
-      'upload_files' => $this->t('Upload files'),
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildPage(array &$page, ImceFM $fm) {
-    if ($fm->hasPermission('upload_files')) {
-      $page['#attached']['library'][] = 'imce/drupal.imce.upload';
-    }
-  }
-
-  /**
-   * Operation handler: upload.
-   */
-  public function opUpload(ImceFM $fm) {
-    $folder = $fm->activeFolder;
-    if (!$folder || !$folder->getPermission('upload_files')) {
-      return;
-    }
-    // Prepare save options
-    $destination = $folder->getUri();
-    $replace = $fm->getConf('replace', FILE_EXISTS_RENAME);
-    $validators = [];
-    // Extension validator
-    $exts = $fm->getConf('extensions', '');
-    $validators['file_validate_extensions'] = [$exts === '*' ? NULL : $exts];
-    // File size and user quota validator
-    $validators['file_validate_size'] = [$fm->getConf('maxsize'), $fm->getConf('quota')];
-    // Image resolution validator.
-    $width = $fm->getConf('maxwidth');
-    $height = $fm->getConf('maxheight');
-    if ($width || $height) {
-      $validators['file_validate_image_resolution'] = [($width ? $width : 10000) . 'x' . ($height ? $height : 10000)];
-    }
-    // Name validator
-    $validators[get_class($this) . '::validateFileName'] = [$fm];
-    // Save files
-    if ($files = file_save_upload('imce', $validators, $destination, NULL, $replace)) {
-      $fs = \Drupal::service('file_system');
-      foreach (array_filter($files) as $file) {
-        // Set status and save
-        $file->setPermanent();
-        $file->save();
-        // Add to the folder and to js response.
-        $name = $fs->basename($file->getFileUri());
-        $folder->addFile($name)->addToJs();
-      }
-    }
-  }
-
-  /**
-   * Validates the name of a file object.
-   */
-  public static function validateFileName(FileInterface $file, ImceFM $fm) {
-    $errors = [];
-    if (!$fm->validateFileName($file->getFileName(), TRUE)) {
-      $errors[] = t('%filename contains invalid characters.', ['%filename' => $filename]);
-    }
-    return $errors;
-  }
-
-}
diff --git a/web/modules/imce/src/Routing/ImceRouteSubscriber.php b/web/modules/imce/src/Routing/ImceRouteSubscriber.php
deleted file mode 100644
index 2e59944d4ac00c2adf35c534f7459e40ed3a93a8..0000000000000000000000000000000000000000
--- a/web/modules/imce/src/Routing/ImceRouteSubscriber.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Drupal\imce\Routing;
-
-use Symfony\Component\Routing\RouteCollection;
-use Drupal\Core\Routing\RouteSubscriberBase;
-
-/**
- * Listens to the dynamic route events.
- */
-class ImceRouteSubscriber extends RouteSubscriberBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function alterRoutes(RouteCollection $collection) {
-    // Conditionally declare imce.page an admin route.
-    if ($route = $collection->get('imce.page')) {
-      $config = \Drupal::config('imce.settings');
-      if ($config->get('admin_theme')) {
-        $route->setOption('_admin_route', TRUE);
-      }
-    }
-  }
-
-}