[CMR] M3-4390: Primary Nav responsive scaffold + styles

Description
This PR will add responsiveness to the primary nav that will prevent the need for scrolling (and as a side effect, fix the position of the ActionMenu items). Please test all the different breakpoints by manually decreasing the viewport width to make sure nothing looks off.
As the nav shrinks, the following will happen in this order:

Drop the username
Drop the Help and Community labels
Replace the Dashboard link with an icon
Switches to mobile nav

TODO

[x] Fix ActionMenu positioning bug
[x] Styles for tablet view
[x] Styles for mobile view
[x] Add overlay when mobile menu is open
[x] Close mobile nav when a grouped link is clicked
[x] Change icon when mobile nav is expanded

I haven't done a SR sweep with this yet- will do this a bit later today.

@WilkinsKa1 just pushed some changes that addressed your feedback and I'll look into the Safari issue 🤔


RMSE for Model is very high

After performing some tests with real metrics from Kepler, the MSE and RMSE appear extremely high. Predictions will be very inaccurate.

Now using MAE as a main error key and it is less than 2% error to the power range (MAE is about 10 watts for two sockets).


Address the Contributor thumbnail issues

Update the Child Thumbnail as the following:

[ ]  Refactor ContributorThumbnail.js to match the design.
[ ] An organization that has cti_contributor = true shows a blue globe icon, as well.

@kevinashworth can you merge this PR?


Website stalls indefinitely.

When the following description is offered, the website stalls indefinitely.
CCDS4702.1:c.123C>T

Does not seem to happen any longer. A "reference could not be retrieved" error appears.


Solver keyed fdb export

Export fdb with the top 4 solvers.

If #894 is merged first I will handle the resolution here.


v0.8.9 gcp instances not supported service

When attempting to import GCP instances in 0.8.9 GCP instances is not supported.
terraformer plan google --resources=instances --projects=<project>--regions=us-central1-a,us-east1-b,us-central1-a
2020/12/01 09:46:41 google importing project <project> region us-central1-a
2020/12/01 09:46:42 google importing... instances
2020/12/01 09:46:42 gcp: instances not supported service

It looks like this was fixed in 0.8.8 so possibly a regression? #604
This does work when building from source, so it seems to be only in the release that it doesn't.

fixed in master and in 0.8.10


Getting warnings, when running npm run build

Hi All,
When i do "npm run build", I am getting following warning. Can you please let us know how to avoid it. or let me know the fix
Thanks you in advance
WARNING in js/app.bb120f197d4f0d965e5f.js from UglifyJs
Condition always true [./~/angular2-template-loader!./~/@angularclass/hmr-loader!./~/tslint-loader!./src/main.ts:6,4]
Side effects in initialization of unused variable HTMLCollection [./~/@angular/forms/src/directives/select_multiple_control_value_accessor.js:31,0]
WARNING in js/polyfills.bb120f197d4f0d965e5f.js from UglifyJs
Condition always true [./~/angular2-template-loader!./~/@angularclass/hmr-loader!./~/tslint-loader!./src/polyfills.ts:7,4]
Dropping unreachable code [./~/angular2-template-loader!./~/@angularclass/hmr-loader!./~/tslint-loader!./src/polyfills.ts:13,2]
Condition always true [./~/es6-shim/es6-shim.js:15,0]
Dropping unreachable code [./~/es6-shim/es6-shim.js:18,3]
Condition always false [./~/es6-shim/es6-shim.js:95,0]
Dropping unused variable cacheSentinel [./~/reflect-metadata/Reflect.js:809,0]
Condition left of || always false [./~/zone.js/dist/zone.js:623,40]
Condition left of || always false [./~/zone.js/dist/zone.js:624,39]
Dropping side-effect-free statement [./~/zone.js/dist/zone.js:652,0]
Side effects in initialization of unused variable Zone [./~/zone.js/dist/zone.js:152,0]
WARNING in js/vendor.bb120f197d4f0d965e5f.js from UglifyJs
Dropping unused variable __unused [./~/@angular/core/src/di/reflective_injector.js:16,0]
Side effects in initialization of unused variable SecurityContext [./~/@angular/core/src/security.js:26,0]
Side effects in initialization of unused variable ViewType [./~/@angular/core/src/linker/view_type.js:20,0]
Side effects in initialization of unused variable freeExports [./~/rxjs/util/root.js:12,0]
Side effects in initialization of unused variable freeModule [./~/rxjs/util/root.js:13,0]
Dropping unused function normalizeArray [./~/@angular/platform-browser-dynamic/index.js:206,0]
Non-strict equality against boolean: != true [./~/@angular/compiler/src/ml_parser/html_tags.js:40,0]
Side effects in initialization of unused variable TagContentType [./~/@angular/compiler/src/ml_parser/tags.js:14,0]
Side effects in initialization of unused variable strCases [./~/@angular/compiler/src/i18n/serializers/xtb.js:110,0]
Side effects in initialization of unused variable ProviderAstType [./~/@angular/compiler/src/template_parser/template_ast.js:232,0]
Side effects in initialization of unused variable PropertyBindingType [./~/@angular/compiler/src/template_parser/template_ast.js:273,0]
Side effects in initialization of unused variable TypeModifier [./~/@angular/compiler/src/output/output_ast.js:19,0]
Side effects in initialization of unused variable BuiltinMethod [./~/@angular/compiler/src/output/output_ast.js:275,0]
Side effects in initialization of unused variable StmtModifier [./~/@angular/compiler/src/output/output_ast.js:509,0]
Dropping unused function _fetchSylesFromState [./~/@angular/compiler/src/animation/animation_parser.js:115,0]
Dropping unused variable renderMethod [./~/@angular/compiler/src/view_compiler/property_binder.js:68,0]
Side effects in initialization of unused variable transitiveModuleMeta [./~/@angular/compiler/src/runtime_compiler.js:108,0]
Dropping unreachable code [./~/@angular/compiler/src/metadata_resolver.js:340,0]
Declarations in unreachable code! [./~/@angular/compiler/src/metadata_resolver.js:340,0]
Dropping unused variable EVENT [./~/@angular/compiler/src/schema/dom_element_schema_registry.js:19,0]
Dropping unused variable __unused [./~/@angular/common/src/pipes/async_pipe.js:34,0]
Side effects in initialization of unused variable matches [./~/@angular/common/src/facade/intl.js:164,0]
Side effects in initialization of unused variable HTMLCollection [./~/@angular/common/src/forms-deprecated/directives/select_multiple_control_value_accessor.js:31,0]
Dropping unused variable SAFE_SRCSET_PATTERN [./~/@angular/platform-browser/src/security/url_sanitizer.js:39,0]
Side effects in initialization of unused variable RequestMethod [./~/@angular/http/src/enums.js:22,0]
Side effects in initialization of unused variable ReadyState [./~/@angular/http/src/enums.js:37,0]
Side effects in initialization of unused variable ResponseType [./~/@angular/http/src/enums.js:50,0]
Side effects in initialization of unused variable ContentType [./~/@angular/http/src/enums.js:64,0]
Side effects in initialization of unused variable ResponseContentType [./~/@angular/http/src/enums.js:75,0]
Dropping unreachable code [./~/@angular/router/src/apply_redirects.js:72,0]
Declarations in unreachable code! [./~/@angular/router/src/apply_redirects.js:72,0]
Dropping unreachable code [./~/@angular/router/src/apply_redirects.js:96,0]
Declarations in unreachable code! [./~/@angular/router/src/apply_redirects.js:96,0]
Dropping unreachable code [./~/@angular/router/src/create_url_tree.js:160,0]
Declarations in unreachable code! [./~/@angular/router/src/create_url_tree.js:160,0]
Side effects in initialization of unused variable pathLocationStrategy [./~/@angular/router/src/router_module.js:24,0]
Side effects in initialization of unused variable hashLocationStrategy [./~/@angular/router/src/router_module.js:28,0]

There is no fix, and there is nothing broken.
Uglify just warns about some stuff, but that is expected.
For example, there is a variable in an if that returns true or false depending on the environment. For build it will be true so it ends like:
if (true) { ... } and that is normal, but uglify just warns about that.
So in short, you can ignore those :)


[BUG] Metadata takes ownership of its construction Map<String, String>!

Map<String, String> map = new HashMap<>();
Metadata metadata = new Metadata(metadata);
map.put("foo", "bar");
assert metadata.get("foo").equals("bar")

Possible solution, make a map copy at construction time.

Fixed in https://github.com/langchain4j/langchain4j/pull/412


Unable to load marine oxygen

I'm looking at marine oxygen in CMIP5 data using the current version 2 development branch. ESMValTool is not able to load any CMIP5 marine oxygen netCDFs and I can't fully understand whats going on.
So far, I've found that

The exception is raised in esmvaltool.preprocessor._io.load_cubes when no cubes are found.
load_cubes calls iris.load_raw, and this returns no cubes for oxygen.

I'm able to reproduce the problem with the following snipet:
import iris
from esmvaltool.preprocessor._io import concatenate_callback

files = ['/Path/to/files/o2_Oyr_HadGEM2-CC_historical_r1i1p1_1960-2005.nc',]
constraints = 'mole_concentration_of_molecular_oxygen_in_sea_water'
callback = concatenate_callback
cubes = iris.load_raw(files, constraints=constraints, callback=callback)
print(cubes)

produces []
However, if I run the equivalent over another field (for instance marine chlorohpyll), everything seems to work fine:
import iris
from esmvaltool.preprocessor._io import concatenate_callback

files = [/Path/to/files/chl_20110930/chl_Oyr_HadGEM2-CC_historical_r1i1p1_1960-2005.nc',]
constraints = 'mass_concentration_of_phytoplankton_expressed_as_chlorophyll_in_sea_water'
callback = concatenate_callback
cubes = iris.load_raw(files, constraints=constraints, callback=callback)
print(cubes)

produces a description of the file loaded:
0: mass_concentration_of_phytoplankton_expressed_as_chlorophyll_in_sea_water / (kg m-3) (time: 46; depth: 40; latitude: 216; longitude: 360)

Can anyone help me figure out why this command would work for Chlorophyll but not for oxygen? Perhaps the automatically loaded constraints are not appropriate? Why would ESMValTool want to concatenate a single file - is that a problem?
Thanks for the help,
cheers!
Lee

Hi Lee,
I had the same problem several times. In my cases, the nc file either had no standard_name or it differed from the one given in the CMOR tables. An example for a fix is nbp for inmcm4.

Hi @schlunma,
thanks! That was very helpful and got me over that bug, and into another! Even with the standard_name and long_name set, I'm still seeing the same problem. Are there other cube properties that could be missing from these files?
Lee

Hmm...for me fixing the standard_name always helped. I don't know of any other attributes, I thought the constraint only contains the standard_name of the cube. Can you post the output of the tool and print the constraint?

Hi,
the output of the command cubes = iris.load_raw(files, constraints=constraints, callback=callback) (as in the first snipet above) is below. Note that I have added several print statements to help me track whats happening.
cubes = iris.load_raw(files, constraints=constraints, callback=callback)
   ...:

iris.__init__.load_raw load_raw
iris.__init__.load_raw ['o2_Oyr_HadGEM2-ES_historical_r1i1p1_2000-2005.nc'] mole_concentration_of_molecular_oxygen_in_sea_water <function concatenate_callback at 0x7f5c28f16d90>
iris.__init__._load_collection
iris.__init__._load_collection cubes: <generator object _generate_cubes at 0x7f5c28ec3d58>
_CubeFilter:  Constraint(name='mole_concentration_of_molecular_oxygen_in_sea_water')
_CubeFilter: cubes:  < No cubes >
_CubeFilterCollection init
_CubeFilterCollection, cubes: <generator object _generate_cubes at 0x7f5c28ec3d58> pairs: [<iris.cube._CubeFilter object at 0x7f5c28f5ea58>] collection: <iris.cube._CubeFilterCollection object at 0x7f5c28f5e3c8>
iris.__init__._generate_cubes
iris.__init__._generate_cubes, scheme file <itertools._grouper object at 0x7f5c28f5eb70>

/users/modellers/ledm/workspace/ESMValToolTest/miniconda/minicondaLee/envs/esmvaltool/lib/python3.6/site-packages/iris/fileformats/cf.py:1143: IrisDeprecation: NetCDF default loading behaviour currently does not expose variables which define reference surfaces for dimensionless vertical coordinates as independent Cubes. This behaviour is deprecated in favour of automatic promotion to Cubes. To switch to the new behaviour, set iris.FUTURE.netcdf_promote to True.
  warn_deprecated(msg)
/users/modellers/ledm/workspace/ESMValToolTest/miniconda/minicondaLee/envs/esmvaltool/lib/python3.6/site-packages/iris/fileformats/_pyke_rules/compiled_krb/fc_rules_cf_fc.py:1817: FutureWarning: Conversion of the second argument of issubdtype from `str` to `str` is deprecated. In future, it will be treated as `np.str_ == np.dtype(str).type`.
  if np.issubdtype(cf_var.dtype, np.str):
/users/modellers/ledm/workspace/ESMValToolTest/miniconda/minicondaLee/envs/esmvaltool/lib/python3.6/site-packages/iris/fileformats/_pyke_rules/compiled_krb/fc_rules_cf_fc.py:1817: FutureWarning: Conversion of the second argument of issubdtype from `str` to `str` is deprecated. In future, it will be treated as `np.str_ == np.dtype(str).type`.
  if np.issubdtype(cf_var.dtype, np.str):

_CubeFilterCollection, cube:  mole_concentration_of_dissolved_molecular_oxygen_in_sea_water / (mol m-3) (time: 6; depth: 40; latitude: 216; longitude: 360)
     Dimension coordinates:
          time                                                                 x         -             -               -
          depth                                                                -         x             -               -
          latitude                                                             -         -             x               -
          longitude                                                            -         -             -               x
     Attributes:
          Conventions: CF-1.5
          NCO: "4.5.3"
          _filename: /users/modellers/ledm/workspace/ESMValToolTest/KIT_data/o2_Oyr_HadGEM2...
          associated_files: baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation gridspecFile: gridspec_ocnBgchem_fx_HadGEM2-ES_historical_r0i0p0.nc...
          branch_time: 0.0
          cmor_version: 2.7.1
          contact<EMAIL_ADDRESS><EMAIL_ADDRESS>          experiment: historical
          experiment_id: historical
          forcing: GHG, Oz, SA, LU, Sl, Vl, BC, OC, (GHG = CO2, N2O, CH4, CFCs)
          frequency: yr
          initialization_method: 1
          institute_id: MOHC
          institution: Met Office Hadley Centre, Fitzroy Road, Exeter, Devon, EX1 3PB, UK, (h...
          invalid_standard_name: mole_concentration_of_molecular_oxygen_in_sea_water
          mo_runid: ajhoh
          model_id: HadGEM2-ES
          modeling_realm: ocnBgchem
          original_name: mo: m02s00i115/1000.
          parent_experiment: pre-industrial control
          parent_experiment_id: piControl
          parent_experiment_rip: r1i1p1
          physics_version: 1
          product: output
          project_id: CMIP5
          realization: 1
          references: Bellouin N. et al, (2007) Improved representation of aerosols for HadGEM2....
          source: HadGEM2-ES (2009) atmosphere: HadGAM2 (N96L38); ocean: HadGOM2 (lat: 1.0-0.3...
          table_id: Table Oyr (27 April 2011) a816306750f284585dc77210f193f7bb
          title: HadGEM2-ES model output prepared for CMIP5 historical
     Cell methods:
          mean: time
          mean where sea: area

_CubeFilterCollection: add_cube
_CubeFilter: add
iris.__init__._load_collection result: <iris.cube._CubeFilterCollection object at 0x7f5c28f5e3c8>
<class 'iris.cube._CubeFilterCollection'>
<bound method _CubeFilterCollection.cubes of <iris.cube._CubeFilterCollection object at 0x7f5c28f5e3c8>>
_CubeFilterCollection: cubes
_CubeFilterCollection: cubes... iterating. 0
iris.__init__.load_raw result of load collection < No cubes >

As you may be able to see, it seems to load the raw cube just fine, but iris refuses to return the cube as part of a cube filter collection.

As I told @valeriupredoi, I suspect that the real underlying issue here is not that the oxygen files are the problem, but rather that ESMValTool (or possibly iris) is failing silently without any way to figure out what went wrong.

Hi Lee,
I think I found the problem: When I load the dataset directly by iris.load_cube(...), the cube's name is called Dissolve Oxygen Concentration, which is not the standard_name of the cube, but the long_name.
Since the standard_name is set correctly in the original file (at least ncdump tells me that), this is an issue of iris. I don't know why it is not able to the load the standard_name.
A fix for this problem could be to extend the constraints in the load function with the long_name or even the var_name of the nc file. Is this a solution @bouweandela?

extract_strict(constraint=name) works fine with the long_name even if the standard_name is messed up (as in the case of derived variables that have an attribute of invalid_standard_name; of course one needs to set long_name) so if one does a load() followed by extract_strict() this will be prevented. Having said this, I will have a look at the actual files right now @ledm

ok so I have just looked the o2 file: that one doe not have a standard_name (instead has an invalid_standard_name in the attributes which denotes an operation on the original the variable):
iris.load_raw('/badc/cmip5/data/cmip5/output1/MOHC/HadGEM2-ES/historical/mon/ocnBgchem/Omon/r1i1p1/latest/o2/o2_Omon_HadGEM2-ES_historical_r1i1p1_195912-200512.nc', constraints=iris.Constraint(name='mole_concentration_of_molecular_oxygen_in_sea_water'))

will of course return an empty list because that name does not exist neither as standard nor as long name; however if one does the load:
d=load(cubes)

followed by assignment of long name and extraction:
d[0].long_name = 'mole_concentration_of_molecular_oxygen_in_sea_water'

 d.extract_strict(constraints=iris.Constraint(name='mole_concentration_of_molecular_oxygen_in_sea_water'))
<iris 'Cube' of mole_concentration_of_molecular_oxygen_in_sea_water / (mol m-3) (time: 553; latitude: 216; longitude: 360)>

works fine

I suggest we add this case at loading point - @bouweandela ?

Just a quick comment, the correct standard name is mole_concentration_of_dissolved_molecular_oxygen_in_sea_water, where as mole_concentration_of_molecular_oxygen_in_sea_water is not a valid standard name.
Is there any way that I can add these into a fix_file fixes command?

So, it looks like the problem here was that the CMOR table in ESMValTool uses the incorrect standard name.
As you can see in the file
https://github.com/ESMValGroup/ESMValTool/blob/version2_development/esmvaltool/cmor/tables/cmip5/Tables/CMIP5_Oyr, the ESMValTool CMOR table uses the non-CF standard name, mole_concentration_of_molecular_oxygen_in_sea_water instead of the CF-compliant standard name mole_concentration_of_dissolved_molecular_oxygen_in_sea_water. Replacing the wrong one with the right name results in everything working as expected!

That is weird. The file at DKRZ has a standard_name which is set to mole_concentration_of_molecular_oxygen_in_sea_water and still cannot be processed. Anyway, glad that you found a solution 👍

@ledm @schlunma the standard name has been changed to the correct one mentioned by Lee for CMIP6_Omon/Oyr - I reckon we should do the same for CMIP5, what say you @jvegasbsc ?

OK guys so @ledm would be very happy if we sorted this out sooner than later  so what I am proposing is to change the standard name in CMIP5 CMOR files to the one that is in CMIP6 files and add a check on the existence of standard_name right before we load like:
if not cube.standard_name:
    long_name = name

so that the load can be done even if that standard name does not exist in cube.
What say yous?

The reason I added the standard_name constraint is that in some cases you end up loading other stuff than the required variable into cubes. As you say, the standard name can be fixed with fix_file and then things work fine, so why would we need additional or different constraints?

@bouweandela absolutely, ma man -- the constraint is most useful, but it is a bit too constrainy :grin: - case at hand is this o2 file - it doesn't have a standard_name so the load_raw by constraint fails noqa which is not cool. Also note that fix_file works only after load point, the load point is the 0th point and o2 does not go past it, when it should (I mean, how'd that file passed the ESGF tests is beyond me but it's there now). Anyway, I had to deal with some real nasty OBS files for a new UKESMer today and I put this in _io.py (the OBS files are actually cubeLists per single monthly time point with no standard_name and weird long_name):
def load_cubes(files, filename, metadata, constraints=None, callback=None):
    """Load iris cubes from files"""
    logger.debug("Loading:\n%s", "\n".join(files))
    cubes = iris.load_raw(files, constraints=constraints, callback=callback)
    if not cubes:
        cubes = []
        for file_i in files:
            cube_list = iris.load(file_i)
            for cube in cube_list:
                if cube.long_name == 'NOAA Climate Data Record (CDR) of Monthly GPCP Satellite-Gauge Combined Precipitation':
                    interest = cube
            interest.long_name = constraints
            # ad-hoc fixes; these should go into the cmor/fixes
            interest.coord('longitude').long_name = 'longitude'
            interest.coord('latitude').long_name = 'latitude'
            interest.coord('longitude').var_name = 'lon'
            interest.coord('latitude').var_name = 'lat'
            iris.util.promote_aux_coord_to_dim_coord(interest, 'longitude')
            iris.util.promote_aux_coord_to_dim_coord(interest, 'latitude')
            interest.coord('latitude').points = interest.coord('latitude').points[::-1]
            interest.data[0] = interest.data[0][::-1]
            interest.units = 'kg m-2 s-1'
            interest.standard_name = 'precipitation_flux'
            interest.var_name = 'precipitation_flux'
            # end fixes
            cubes.append(cube_list.extract_strict(constraints=iris.Constraint(interest.long_name)))
    iris.util.unify_time_units(cubes)
    if not cubes:
        raise Exception('Can not load cubes from {0}'.format(files))

    for cube in cubes:
        cube.attributes['_filename'] = filename
        cube.attributes['metadata'] = yaml.safe_dump(metadata)
        # TODO add block below when using iris 2.0
        # always set fillvalue to 1e+20
        # if np.ma.is_masked(cube.data):
        #     np.ma.set_fill_value(cube.data, GLOBAL_FILL_VALUE)

    return cubes

of course, those metadata and data fixes will go into cmor/_fixes, but if there is only the load_raw with standard_name constraint, these types of files will never be loaded.

also note that the concatenation in _io is very basic at the moment and will fail (thanks, iris!) if even certain metadata arguments (that are unimportant to the data operations themselves) differ between cubes, but that's a different story

Actually, fix_file is executed before the loading step, so that should work. It does at least in the case of inmcm4`s nbp:
https://github.com/ESMValGroup/ESMValTool/blob/dfedafd28dfad253c569e10aebdd9e18f6ea3739/esmvaltool/cmor/_fixes/CMIP5/inmcm4.py#L58

That's cool - I wasn't aware we can apply fixes that go before the load point (the callback is actually working nicely then!). Perfect then, problem solved for this o2 :grin: here's an idea - we can use these fixes to fix OBS files too? Like that crap set of files I posted the fixes in the code snippet

Yeah, I already did it with some OBS file outside of the tool, worked fine! :+1:

sweet caboose, that is useful! could you point me to that one, man, pls? You guys have a good weekend in the meantime, I needs beer :beers:

It was an OBS file where the standard_name was wrong, unfortunately I did the fix just for testing purposes on a local branch which is gone now. However, just put a file with the name of your observations here ESMValTool/esmvaltool/cmor/_fixes/OBS/ and create a class with the name of the variable inside it with a function fix_file like that:
https://github.com/ESMValGroup/ESMValTool/blob/dfedafd28dfad253c569e10aebdd9e18f6ea3739/esmvaltool/cmor/_fixes/CMIP5/inmcm4.py#L58
Enjoy your weekend, man! :beers:

Related to #606

@ledm is this solved?

Yes, I think so.


Add option to ignore first line

CSV with header files is a common format.  It would be great if there is an additional command line parameter to ignore the header line.

Ooops... it turns out its already there!
https://github.com/timescale/timescaledb-parallel-copy/pull/15
What about the README to document the existing parameters?


Send the WindowHandle with AppDelegate::window_added.

Closes  #2116.
Mostly just applying @sjoshid's recommendations and updating the one example that used window_added.
This is a breaking change.

The CI failures are clippy's fault, not yours.


Add mount parallelstore service to mount parallelstore for every reboot

Submission Checklist
NOTE: Community submissions can take up to 2 weeks to be reviewed.
Please take the following actions before submitting this pull request.

Fork your PR branch from the Toolkit "develop" branch (not main)
Test all changes with pre-commit in a local branch #
Confirm that "make tests" passes all tests
Add or modify unit tests to cover code changes
Ensure that unit test coverage remains above 80%
Update all applicable documentation
Follow Cluster Toolkit Contribution guidelines #

I do feel, this fix should be improved.


Sign Istio Images

We should sign our Istio images so that people can verify they were published by Istio. Looking into how to do this with Cosign

Part of #33118

@stewartbutler FYI

Thanks, I'll start work on this soon.


Setting brokers to 1 does change replica could for cp-kafka stateful-set

If you try to set the broker value to 1 in either the configuration file or from the command line, helm still deploys 3 replicas.
helm install --debug --dry-run --name eventq --set brokers=1 confluentinc/cp-helm-charts
...
---
# Source: cp-helm-charts/charts/cp-kafka/templates/statefulset.yaml
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: eventq-cp-kafka
  labels:
    app: cp-kafka
    chart: cp-kafka-0.1.0
    release: eventq
    heritage: Tiller
spec:
  serviceName: eventq-cp-kafka-headless
  podManagementPolicy: OrderedReady
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: cp-kafka
        release: eventq
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "5556"
    spec:

This works:
helm install --debug --dry-run --name eventq --set cp-kafka.brokers=1 confluentinc/cp-helm-charts

Seems like only the top level values.yaml file is being used for this. Other parameters are working as expected though.

Looks like the default values.yaml file pointed to in the documentation needs to be updated.

@kevinkirkup I ran into this as well but this ended up working for me: https://github.com/confluentinc/cp-helm-charts/issues/264#issuecomment-498434970.


Add section describing what the buffer does

@jclandoni @lycas Could you guys proofread this for correctness if you get a chance? 😬
Click Files changed above to see the change.
Thanks!

still in amazement that you were able to turn this into a practical. It really is my favorite type of imaging and super happy you can teach it to the students

Thanks for the feedback! The students will appreciate it!


fix tree agglomeration in agglomerateByPrevalence

As mentioned in https://github.com/microbiome/mia/issues/573, agglomerateByPrevalence returns a TSE object with rowTree = NULL.
This PR removes the class checking and class conversion from TSE to SCE that removes the tree.
With this modification, the tree is returned and agglomerated if agglomerate.tree = TRUE.
data("GlobalPatterns")
tse <- GlobalPatterns
tse <- agglomerateByPrevalence(tse, rank = "Phylum", agglomerate.tree = FALSE)
rowTree(tse)

Phylogenetic tree with 19216 tips and 19215 internal nodes.
Tip labels:
549322, 522457, 951, 244423, 586076, 246140, ...
Node labels:
, 0.858.4, 1.000.154, 0.764.3, 0.995.2, 1.000.2, ...
Rooted; includes branch lengths.

data("GlobalPatterns")
tse <- GlobalPatterns
tse <- agglomerateByPrevalence(tse, rank = "Phylum", agglomerate.tree = TRUE)
rowTree(tse)

Phylogenetic tree with 67 tips and 66 internal nodes.
Tip labels:
549322, 173903, 368907, 51888, 591769, 249529, ...
Node labels:
, 0.858.4, 1.000.21479, 0.946.619, 0.953.588, 0.940.473, ...
Rooted; includes branch lengths.

Also add input check for agglomerate.tree. Fail fast.

Realized one thing: the function might not work if the input is SummarizedExperiment since it has no trees.
--> Create generic method for TreeSummarizedExperiment

Call next method which will can generic SE method
Merge trees
Merge reference sequences (see agglomerateByVariable)

Agglomeration of reference sequences was not working, but now everything should be fine.
Can you add tests for reference sequences? Check other agglomeration functions and their unit tests.
You can find suitable data from data("SilvermanAGutData", package = "miaTime")


Display streaming freezes in phone standby

When my S24+ goes into standby (aka enables the always on display), the display streaming to my PC freezes after a few seconds. If I right-click to wake up the display again, the phone physically turns on again and receives all inputs regularly, but the fps on the PC stay at 0 and the video stream remains frozen.
This does not happen if I use the c2.android.avc.encoder instead of the default c2.exynos.h264.encoder (but the android encoder is very laggy in comparison).
If I let scrcpy record the session as a video in the background and watch it afterwards, the recorded video is never frozen but continuously up-to-date.
adb logs show nothing of interest, neither the console output.
Environment

OS: Windows, macOS
Scrcpy version: 2.4, 2.6.1
Device model: Samsung S24+
Android version: 14, stock

the phone physically turns on again and receives all inputs regularly, but the fps on the PC stay at 0 and the video stream remains frozen.

If I let scrcpy record the session as a video in the background and watch it afterwards, the recorded video is never frozen but continuously up-to-date.

Weird, I can't explain how this is possible.
At first, I assumed that in "standby" mode, MediaCodec stopped producing frames (that would explain the freeze), but on wake up, if your recording is ok, then the frames are sent to the client which should display them (even if most of them are skipped). :thinking:

Weird, I can't explain how this is possible.

Want me to make it a bit more weird? No problem:
Recently I've discovered that the mirroring with the default encoder only freezes, when using --no-audio. Connecting without this parameter results in perfectly normal scrcpy behaviour.

Looks like an encoder issue then :)
--no-audio fixing video capture was already reported for some devices (see https://github.com/Genymobile/scrcpy/issues/4639#issuecomment-1966027858 https://github.com/Genymobile/scrcpy/issues/3859#issuecomment-1493197903), but it these cases video initially did not work at all.

Ah yeah, that's weird. :smile:


docs: Update Material Toolkit resources links

## PR Type

Documentation content changes

Description
Update Material Toolkit resources links with proper aka links

@Mergifyio backport release/stable/5.1


Fix/get it running

It's running here: https://pdxpython.herokuapp.com/
This is branched off of @hanneshapke #17
I added deploy notes to the README to get it running on heroku, which boils down to:

Heroku thinks the repo is a Node.js  app because of the package.json file and an Python app and defaults to Node.js. This can be solved by removing the package.json file or setting the app type via the command heroku buildpacks:set heroku/python or if we need Heorku to install the JS dependencies from package.json we'll need to set a multi-buildpack, e.g. Node.js and Python, install both dependencies and then run as a Python app, e.g. heroku buildpacks:add --index 1 heroku/nodejs
django-compressor was at a version that either didn't work with the python version or didn't work with the Django version. I upped it to the latest, 2.0, and it runs locally and on Heroku.
django-compressor wasn't being run. I added a bin/post_compile dir and file which Heroku will execute after installing dependencies. post_compile runs the collectstatic and compress management commands.

So it's running, but there are some bugs:
I don't think 404s or 500s are handled at this point:
2016-01-29T19:27:47.301095+00:00 app[web.1]: ImproperlyConfigured at /favicon.ico
2016-01-29T19:27:47.301096+00:00 app[web.1]: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

I have a number of other recommendations, but it's working so I stopped here.

move manage.py to the root of the app would help out
one settings file, for tests you can have the test runner be something like SECRET_KEY=abc cd portland_python;python manage.py test if Travis cannot set a SECRET_KEY config var
better error logging and reporting, maybe sentry or something free
deploy to heroku button for new folks to get spun up DONE! check this out:

https://github.com/alecklandgraf/portlandpython.org/pull/1
https://github.com/alecklandgraf/portlandpython.org

P.s.  manage.py migrate also fails in a weird way, considering no database is defined in settings, I thought that'd be the error, but it has something to do with loading urls.
P.p.s. I also configured django-compressor to create gzip versions of the css and js files. whitenoise will serve the gzipped version if the browser support or will fall back to the raw css.

┌alandgraf@myhost ~
└> curl -I -H "Accept-Encoding: gzip" https://pdxpython.herokuapp.com/static/CACHE/css/c86cdf47592f.css
HTTP/1.1 200 OK
Connection: keep-alive
Server: gunicorn/19.3.0
Date: Fri, 29 Jan 2016 21:49:55 GMT
Last-Modified: Fri, 29 Jan 2016 21:48:26 GMT
Content-Type: text/css; charset="utf-8"
Cache-Control: public, max-age=60
Access-Control-Allow-Origin: *
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 18812
Via: 1.1 vegur

Cheers,
Aleck

I currently have the deploy to heroku button working on my fork, if we merge into base, we'll have to update the app.js to link to this repo and not mine.
Use the button:  https://github.com/alecklandgraf/portlandpython.org
See how it works: https://github.com/alecklandgraf/portlandpython.org/pull/1

This is awesome @alecklandgraf! Thanks so much for building on @hanneshapke's work. I'll merge this in.

You're welcome Patrick,
Make sure you or someone with heroku access sets the build pack via the
command:
heroku buildpacks:set heroku/python
Aleck Landgraf
Sent from my iPhone.
On Feb 2, 2016, at 6:21 AM, Patrick Beeson<EMAIL_ADDRESS>wrote:
This is awesome @alecklandgraf https://github.com/alecklandgraf! Thanks
so much for building on @hanneshapke https://github.com/hanneshapke's
work. I'll merge this in.
—
Reply to this email directly or view it on GitHub
https://github.com/portlandpython/portlandpython.org/pull/18#issuecomment-178596089
.

Hi @alecklandgraf! I'm still seeing the app error on Heroku after setting the buildpack (Node and Python). Am I missing something?

You may need to touch some code and push for heroku to rebuild.
Aleck Landgraf
Sent from my iPhone.
On Feb 2, 2016, at 8:23 PM, Patrick Beeson<EMAIL_ADDRESS>wrote:
Hi @alecklandgraf https://github.com/alecklandgraf! I'm still seeing the
app error on Heroku after setting the buildpack (Node and Python). Am I
missing something?
—
Reply to this email directly or view it on GitHub
https://github.com/portlandpython/portlandpython.org/pull/18#issuecomment-178997781
.

@patrickbeeson I'm happy to jam on it together.
Can you send a gist of the console log during your git push heroku dev:master or the build log from the heroku dashboard?

Sure!
Here's what I got:
-----> Using set buildpack heroku/python
-----> Python app detected
-----> Installing dependencies with pip
-----> Preparing static assets
       Collectstatic configuration error. To debug, run:
       $ heroku run python portland_python/manage.py collectstatic --noinput
-----> Running post-compile hook
-----> I'm post-compile hook
-----> Running run_collectstatic
-----> Collecting static files
       Traceback (most recent call last):
       FileNotFoundError: [Errno 2] No such file or directory: '/app/portland_python/static'
 !     Push rejected, failed to compile Python app

Looks like the static dir is missing, which is odd. I don't recall removing that.

Since git tracks files not dirs, perhaps recreate the static dir with a dummy file might work or run a collectstatic.

@ChrisFreeman Ah yes, good point.

for reference here's what I saw on deploy:
-----> Fetching set buildpack https://github.com/heroku/heroku-buildpack-python... done
-----> Python app detected
-----> Installing runtime (python-3.5.0)
-----> Installing dependencies with pip
       Collecting appnope==0.1.0 (from -r requirements.txt (line 1))
       Downloading appnope-0.1.0-py2.py3-none-any.whl
       Collecting decorator==4.0.2 (from -r requirements.txt (line 2))
       Downloading decorator-4.0.2-py2.py3-none-any.whl
       Collecting dj-database-url==0.3.0 (from -r requirements.txt (line 3))
       Downloading dj_database_url-0.3.0-py2.py3-none-any.whl
       Collecting dj-static==0.0.6 (from -r requirements.txt (line 4))
       Downloading dj-static-0.0.6.tar.gz
       Collecting Django==1.9 (from -r requirements.txt (line 5))
       Downloading Django-1.9-py2.py3-none-any.whl (6.6MB)
       Collecting django-appconf==1.0.1 (from -r requirements.txt (line 6))
       Downloading django_appconf-1.0.1-py2.py3-none-any.whl
       Collecting django-compressor==2.0 (from -r requirements.txt (line 7))
       Downloading django_compressor-2.0-py2.py3-none-any.whl (120kB)
       Collecting django-debug-toolbar==1.4 (from -r requirements.txt (line 8))
       Downloading django_debug_toolbar-1.4-py2.py3-none-any.whl (212kB)
       Collecting django-extensions==1.6.1 (from -r requirements.txt (line 9))
       Downloading django_extensions-1.6.1-py2.py3-none-any.whl (202kB)
       Collecting django-libsass==0.6 (from -r requirements.txt (line 10))
       Downloading django-libsass-0.6.tar.gz
       Collecting django-model-utils==2.4 (from -r requirements.txt (line 11))
       Downloading django-model-utils-2.4.tar.gz
       Collecting django-toolbelt==0.0.1 (from -r requirements.txt (line 12))
       Downloading django-toolbelt-0.0.1.tar.gz
       Collecting docutils==0.12 (from -r requirements.txt (line 13))
       Downloading docutils-0.12-py3-none-any.whl (508kB)
       Collecting gnureadline==6.3.3 (from -r requirements.txt (line 14))
       Downloading gnureadline-6.3.3.tar.gz (2.5MB)
       Collecting ipdb==0.8.1 (from -r requirements.txt (line 15))
       Downloading ipdb-0.8.1.zip
       Collecting ipython==4.0.0 (from -r requirements.txt (line 16))
       Downloading ipython-4.0.0-py3-none-any.whl (730kB)
       Collecting ipython-genutils==0.1.0 (from -r requirements.txt (line 17))
       Downloading ipython_genutils-0.1.0-py2.py3-none-any.whl
       Collecting libsass==0.10.0 (from -r requirements.txt (line 18))
       Downloading libsass-0.10.0.tar.gz (272kB)
       Collecting path.py==8.1.1 (from -r requirements.txt (line 19))
       Downloading path.py-8.1.1-py2.py3-none-any.whl
       Collecting pexpect==3.3 (from -r requirements.txt (line 20))
       Downloading pexpect-3.3.tar.gz (132kB)
       Collecting pickleshare==0.5 (from -r requirements.txt (line 21))
       Downloading pickleshare-0.5.tar.gz
       Collecting Pillow==3.0.0 (from -r requirements.txt (line 22))
       Downloading Pillow-3.0.0.tar.gz (9.6MB)
       Collecting psycopg2==2.6.1 (from -r requirements.txt (line 23))
       Downloading psycopg2-2.6.1.tar.gz (371kB)
       Collecting pytz==2015.4 (from -r requirements.txt (line 24))
       Downloading pytz-2015.4-py2.py3-none-any.whl (475kB)
       Collecting simplegeneric==0.8.1 (from -r requirements.txt (line 25))
       Downloading simplegeneric-0.8.1.zip
       Collecting six==1.9.0 (from -r requirements.txt (line 26))
       Downloading six-1.9.0-py2.py3-none-any.whl
       Collecting sqlparse==0.1.16 (from -r requirements.txt (line 27))
       Downloading sqlparse-0.1.16.tar.gz (58kB)
       Collecting static3==0.6.1 (from -r requirements.txt (line 28))
       Downloading static3-0.6.1.tar.gz
       Collecting traitlets==4.0.0 (from -r requirements.txt (line 29))
       Downloading traitlets-4.0.0-py2.py3-none-any.whl (56kB)
       Collecting Unipath==1.1 (from -r requirements.txt (line 30))
       Downloading Unipath-1.1.tar.gz
       Collecting wheel==0.24.0 (from -r requirements.txt (line 31))
       Downloading wheel-0.24.0-py2.py3-none-any.whl (63kB)
       Collecting whitenoise==2.0.6 (from -r requirements.txt (line 32))
       Downloading whitenoise-2.0.6-py2.py3-none-any.whl
       Collecting gunicorn==19.3.0 (from -r requirements.txt (line 33))
       Downloading gunicorn-19.3.0-py2.py3-none-any.whl (110kB)
       Collecting coverage==4.0.3 (from -r requirements.txt (line 34))
       Downloading coverage-4.0.3.tar.gz (354kB)
       Collecting django-coverage-plugin==1.1 (from -r requirements.txt (line 35))
       Downloading django_coverage_plugin-1.1.tar.gz
       Collecting flake8==2.5.0 (from -r requirements.txt (line 36))
       Downloading flake8-2.5.0-py2.py3-none-any.whl
       Collecting django-test-plus==1.0.11 (from -r requirements.txt (line 37))
       Downloading django-test-plus-1.0.11.tar.gz
       Collecting factory-boy==2.6.0 (from -r requirements.txt (line 38))
       Downloading factory_boy-2.6.0-py2.py3-none-any.whl
       Collecting rjsmin==1.0.12 (from django-compressor==2.0->-r requirements.txt (line 7))
       Downloading rjsmin-1.0.12.tar.gz (446kB)
       Collecting rcssmin==1.0.6 (from django-compressor==2.0->-r requirements.txt (line 7))
       Downloading rcssmin-1.0.6.tar.gz (582kB)
       Collecting mccabe<0.4,>=0.2.1 (from flake8==2.5.0->-r requirements.txt (line 36))
       Downloading mccabe-0.3.1-py2.py3-none-any.whl
       Collecting pyflakes<1.1,>=0.8.1 (from flake8==2.5.0->-r requirements.txt (line 36))
       Downloading pyflakes-1.0.0-py2.py3-none-any.whl (152kB)
       Collecting pep8!=1.6.0,!=1.6.1,!=1.6.2,>=1.5.7 (from flake8==2.5.0->-r requirements.txt (line 36))
       Downloading pep8-1.7.0-py2.py3-none-any.whl (41kB)
       Collecting fake-factory>=0.5.0 (from factory-boy==2.6.0->-r requirements.txt (line 38))
       Downloading fake-factory-0.5.3.tar.gz (392kB)
       Installing collected packages: appnope, decorator, dj-database-url, static3, dj-static, Django, six, django-appconf, rjsmin, rcssmin, django-compressor, sqlparse, django-debug-toolbar, django-extensions, libsass, django-libsass, django-model-utils, psycopg2, gunicorn, django-toolbelt, docutils, gnureadline, simplegeneric, path.py, pickleshare, ipython-genutils, traitlets, pexpect, ipython, ipdb, Pillow, pytz, Unipath, wheel, whitenoise, coverage, django-coverage-plugin, mccabe, pyflakes, pep8, flake8, django-test-plus, fake-factory, factory-boy
       Running setup.py install for static3: started
           Running setup.py install for static3: finished with status 'done'
         Running setup.py install for dj-static: started
           Running setup.py install for dj-static: finished with status 'done'
         Running setup.py install for rjsmin: started
           Running setup.py install for rjsmin: finished with status 'done'
         Running setup.py install for rcssmin: started
           Running setup.py install for rcssmin: finished with status 'done'
         Running setup.py install for sqlparse: started
           Running setup.py install for sqlparse: finished with status 'done'
         Running setup.py install for libsass: started
           Running setup.py install for libsass: still running...
       Running setup.py install for libsass: finished with status 'done'
         Running setup.py install for django-libsass: started
           Running setup.py install for django-libsass: finished with status 'done'
         Running setup.py install for django-model-utils: started
           Running setup.py install for django-model-utils: finished with status 'done'
         Running setup.py install for psycopg2: started
           Running setup.py install for psycopg2: finished with status 'done'
         Running setup.py install for django-toolbelt: started
           Running setup.py install for django-toolbelt: finished with status 'done'
         Running setup.py install for gnureadline: started
           Running setup.py install for gnureadline: finished with status 'done'
         Running setup.py install for simplegeneric: started
           Running setup.py install for simplegeneric: finished with status 'done'
         Running setup.py install for pickleshare: started
           Running setup.py install for pickleshare: finished with status 'done'
         Running setup.py install for pexpect: started
           Running setup.py install for pexpect: finished with status 'done'
         Running setup.py install for ipdb: started
           Running setup.py install for ipdb: finished with status 'done'
         Running setup.py install for Pillow: started
           Running setup.py install for Pillow: finished with status 'done'
         Running setup.py install for Unipath: started
           Running setup.py install for Unipath: finished with status 'done'
         Running setup.py install for coverage: started
           Running setup.py install for coverage: finished with status 'done'
         Running setup.py install for django-coverage-plugin: started
           Running setup.py install for django-coverage-plugin: finished with status 'done'
         Running setup.py install for django-test-plus: started
           Running setup.py install for django-test-plus: finished with status 'done'
         Running setup.py install for fake-factory: started
           Running setup.py install for fake-factory: finished with status 'done'
       Successfully installed Django-1.9 Pillow-3.0.0 Unipath-1.1 appnope-0.1.0 coverage-4.0.3 decorator-4.0.2 dj-database-url-0.3.0 dj-static-0.0.6 django-appconf-1.0.1 django-compressor-2.0 django-coverage-plugin-1.1 django-debug-toolbar-1.4 django-extensions-1.6.1 django-libsass-0.6 django-model-utils-2.4 django-test-plus-1.0.11 django-toolbelt-0.0.1 docutils-0.12 factory-boy-2.6.0 fake-factory-0.5.3 flake8-2.5.0 gnureadline-6.3.3 gunicorn-19.3.0 ipdb-0.8.1 ipython-4.0.0 ipython-genutils-0.1.0 libsass-0.10.0 mccabe-0.3.1 path.py-8.1.1 pep8-1.7.0 pexpect-3.3 pickleshare-0.5 psycopg2-2.6.1 pyflakes-1.0.0 pytz-2015.4 rcssmin-1.0.6 rjsmin-1.0.12 simplegeneric-0.8.1 six-1.9.0 sqlparse-0.1.16 static3-0.6.1 traitlets-4.0.0 wheel-0.24.0 whitenoise-2.0.6
-----> Preparing static assets
       Running collectstatic...
       Post-processed 'bower_components/jquery/src/manipulation/var/rcheckableType.js' as 'bower_components/jquery/src/manipulation/var/rcheckableType.19f6af061c62.js'
       Post-processed 'bower_components/jquery/src/css/var/rmargin.js' as 'bower_components/jquery/src/css/var/rmargin.028581c37c9d.js'
       Post-processed 'bower_components/jquery/src/css/var/rnumnonpx.js' as 'bower_components/jquery/src/css/var/rnumnonpx.2a34d3f4def5.js'
       Post-processed 'bower_components/jquery/src/css/var/cssExpand.js' as 'bower_components/jquery/src/css/var/cssExpand.2d8ac6725d0f.js'
       Post-processed 'bower_components/jquery/src/css/var/isHidden.js' as 'bower_components/jquery/src/css/var/isHidden.13a6f243bea6.js'
       Post-processed 'bower_components/jquery/src/css/var/getStyles.js' as 'bower_components/jquery/src/css/var/getStyles.1bd83fe65063.js'
       Post-processed 'bower_components/jquery/src/traversing/var/rneedsContext.js' as 'bower_components/jquery/src/traversing/var/rneedsContext.b5676c00977e.js'
       Post-processed 'bower_components/jquery/src/sizzle/dist/sizzle.min.js' as 'bower_components/jquery/src/sizzle/dist/sizzle.min.9ffb8c10bbcf.js'
       Post-processed 'bower_components/jquery/src/sizzle/dist/sizzle.min.map' as 'bower_components/jquery/src/sizzle/dist/sizzle.min.e17bb4332f3b.map'
       Post-processed 'bower_components/jquery/src/sizzle/dist/sizzle.js' as 'bower_components/jquery/src/sizzle/dist/sizzle.3bfa79804d25.js'
       Post-processed 'bower_components/jquery/src/ajax/var/rquery.js' as 'bower_components/jquery/src/ajax/var/rquery.86cc4813fe7e.js'
       Post-processed 'bower_components/jquery/src/ajax/var/nonce.js' as 'bower_components/jquery/src/ajax/var/nonce.c0fee61b182d.js'
       Post-processed 'bower_components/jquery/src/data/var/data_user.js' as 'bower_components/jquery/src/data/var/data_user.494fafb4dac6.js'
       Post-processed 'bower_components/jquery/src/data/var/data_priv.js' as 'bower_components/jquery/src/data/var/data_priv.494fafb4dac6.js'
       Post-processed 'bower_components/jquery/src/core/var/rsingleTag.js' as 'bower_components/jquery/src/core/var/rsingleTag.0f07e690c168.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/popover.js' as 'bower_components/bootstrap/dist/js/umd/popover.f4e9258d144e.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/util.js' as 'bower_components/bootstrap/dist/js/umd/util.1650b069b1c3.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/dropdown.js' as 'bower_components/bootstrap/dist/js/umd/dropdown.354f9efa002f.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/button.js' as 'bower_components/bootstrap/dist/js/umd/button.9e559f870017.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/modal.js' as 'bower_components/bootstrap/dist/js/umd/modal.3f071dcc147c.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/collapse.js' as 'bower_components/bootstrap/dist/js/umd/collapse.79ef58022856.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/alert.js' as 'bower_components/bootstrap/dist/js/umd/alert.14dd2694aa13.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/tooltip.js' as 'bower_components/bootstrap/dist/js/umd/tooltip.52ca818b9ee2.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/carousel.js' as 'bower_components/bootstrap/dist/js/umd/carousel.b86b3e0258f1.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/scrollspy.js' as 'bower_components/bootstrap/dist/js/umd/scrollspy.4d82dbafc375.js'
       Post-processed 'bower_components/bootstrap/dist/js/umd/tab.js' as 'bower_components/bootstrap/dist/js/umd/tab.9f0fc98bcf82.js'
       Post-processed 'bower_components/jquery/src/manipulation/support.js' as 'bower_components/jquery/src/manipulation/support.fa4b7fa59344.js'
       Post-processed 'bower_components/jquery/src/manipulation/_evalUrl.js' as 'bower_components/jquery/src/manipulation/_evalUrl.d3bbdfa4e6d9.js'
       Post-processed 'bower_components/jquery/src/event/support.js' as 'bower_components/jquery/src/event/support.3111a896e8ef.js'
       Post-processed 'bower_components/jquery/src/event/alias.js' as 'bower_components/jquery/src/event/alias.ba4e3a937d72.js'
       Post-processed 'bower_components/jquery/src/event/ajax.js' as 'bower_components/jquery/src/event/ajax.7badf4347e13.js'
       Post-processed 'bower_components/jquery/src/exports/amd.js' as 'bower_components/jquery/src/exports/amd.0e2411cca15d.js'
       Post-processed 'bower_components/jquery/src/exports/global.js' as 'bower_components/jquery/src/exports/global.6c1961ae51a4.js'
       Post-processed 'bower_components/jquery/src/css/hiddenVisibleSelectors.js' as 'bower_components/jquery/src/css/hiddenVisibleSelectors.e5245dadac25.js'
       Post-processed 'bower_components/jquery/src/css/support.js' as 'bower_components/jquery/src/css/support.e4a18e8b5e80.js'
       Post-processed 'bower_components/jquery/src/css/defaultDisplay.js' as 'bower_components/jquery/src/css/defaultDisplay.b246be561591.js'
       Post-processed 'bower_components/jquery/src/css/swap.js' as 'bower_components/jquery/src/css/swap.aef668d22cdb.js'
       Post-processed 'bower_components/jquery/src/css/addGetHookIf.js' as 'bower_components/jquery/src/css/addGetHookIf.85359591d829.js'
       Post-processed 'bower_components/jquery/src/css/curCSS.js' as 'bower_components/jquery/src/css/curCSS.f3dc1e95efe7.js'
       Post-processed 'bower_components/jquery/src/traversing/findFilter.js' as 'bower_components/jquery/src/traversing/findFilter.424d852ce55e.js'
       Post-processed 'bower_components/jquery/src/ajax/parseJSON.js' as 'bower_components/jquery/src/ajax/parseJSON.6364c59ad595.js'
       Post-processed 'bower_components/jquery/src/ajax/load.js' as 'bower_components/jquery/src/ajax/load.89fa7866e128.js'
       Post-processed 'bower_components/jquery/src/ajax/jsonp.js' as 'bower_components/jquery/src/ajax/jsonp.c09be897ccc5.js'
       Post-processed 'bower_components/jquery/src/ajax/script.js' as 'bower_components/jquery/src/ajax/script.3f02a4103494.js'
       Post-processed 'bower_components/jquery/src/ajax/xhr.js' as 'bower_components/jquery/src/ajax/xhr.a495ef52c6e6.js'
       Post-processed 'bower_components/jquery/src/ajax/parseXML.js' as 'bower_components/jquery/src/ajax/parseXML.a619ab384235.js'
       Post-processed 'bower_components/jquery/src/data/accepts.js' as 'bower_components/jquery/src/data/accepts.40730b360772.js'
       Post-processed 'bower_components/jquery/src/data/Data.js' as 'bower_components/jquery/src/data/Data.1899f3691a82.js'
       Post-processed 'bower_components/jquery/src/var/concat.js' as 'bower_components/jquery/src/var/concat.dbdb2c9d038b.js'
       Post-processed 'bower_components/jquery/src/var/slice.js' as 'bower_components/jquery/src/var/slice.06b38aed4a71.js'
       Post-processed 'bower_components/jquery/src/var/arr.js' as 'bower_components/jquery/src/var/arr.73fe8cc31324.js'
       Post-processed 'bower_components/jquery/src/var/support.js' as 'bower_components/jquery/src/var/support.135b80391f6e.js'
       Post-processed 'bower_components/jquery/src/var/hasOwn.js' as 'bower_components/jquery/src/var/hasOwn.068dbad1531e.js'
       Post-processed 'bower_components/jquery/src/var/toString.js' as 'bower_components/jquery/src/var/toString.6fc5af5803e4.js'
       Post-processed 'bower_components/jquery/src/var/indexOf.js' as 'bower_components/jquery/src/var/indexOf.fdf0c4d8a782.js'
       Post-processed 'bower_components/jquery/src/var/pnum.js' as 'bower_components/jquery/src/var/pnum.04912d16c744.js'
       Post-processed 'bower_components/jquery/src/var/push.js' as 'bower_components/jquery/src/var/push.da4387ab5b45.js'
       Post-processed 'bower_components/jquery/src/var/rnotwhite.js' as 'bower_components/jquery/src/var/rnotwhite.b1e91d127880.js'
       Post-processed 'bower_components/jquery/src/var/class2type.js' as 'bower_components/jquery/src/var/class2type.8beeb098fb5e.js'
       Post-processed 'bower_components/jquery/src/var/strundefined.js' as 'bower_components/jquery/src/var/strundefined.9e452cb4a553.js'
       Post-processed 'bower_components/jquery/src/core/init.js' as 'bower_components/jquery/src/core/init.ac289666e93c.js'
       Post-processed 'bower_components/jquery/src/core/access.js' as 'bower_components/jquery/src/core/access.190cc8756079.js'
       Post-processed 'bower_components/jquery/src/core/parseHTML.js' as 'bower_components/jquery/src/core/parseHTML.431b6e91175f.js'
       Post-processed 'bower_components/jquery/src/core/ready.js' as 'bower_components/jquery/src/core/ready.27390e21336c.js'
       Post-processed 'bower_components/jquery/src/effects/animatedSelector.js' as 'bower_components/jquery/src/effects/animatedSelector.293275acc2e1.js'
       Post-processed 'bower_components/jquery/src/effects/Tween.js' as 'bower_components/jquery/src/effects/Tween.40596bc9250c.js'
       Post-processed 'bower_components/jquery/src/attributes/support.js' as 'bower_components/jquery/src/attributes/support.b010f4b38f4b.js'
       Post-processed 'bower_components/jquery/src/attributes/classes.js' as 'bower_components/jquery/src/attributes/classes.e4d2a049774c.js'
       Post-processed 'bower_components/jquery/src/attributes/prop.js' as 'bower_components/jquery/src/attributes/prop.0e0e5a24a03c.js'
       Post-processed 'bower_components/jquery/src/attributes/attr.js' as 'bower_components/jquery/src/attributes/attr.5ccd4aab3543.js'
       Post-processed 'bower_components/jquery/src/attributes/val.js' as 'bower_components/jquery/src/attributes/val.7f45011ee896.js'
       Post-processed 'bower_components/jquery/src/queue/delay.js' as 'bower_components/jquery/src/queue/delay.6e52fac4cd26.js'
       Post-processed 'bower_components/bootstrap/js/dist/popover.js' as 'bower_components/bootstrap/js/dist/popover.ff854087a8cd.js'
       Post-processed 'bower_components/bootstrap/js/dist/alert.js.map' as 'bower_components/bootstrap/js/dist/alert.js.5b5ef53ffe88.map'
       Post-processed 'bower_components/bootstrap/js/dist/util.js' as 'bower_components/bootstrap/js/dist/util.1e9e7603bfbd.js'
       Post-processed 'bower_components/bootstrap/js/dist/dropdown.js' as 'bower_components/bootstrap/js/dist/dropdown.a2bdfe49b73a.js'
       Post-processed 'bower_components/bootstrap/js/dist/modal.js.map' as 'bower_components/bootstrap/js/dist/modal.js.e1c65c131185.map'
       Post-processed 'bower_components/bootstrap/js/dist/button.js' as 'bower_components/bootstrap/js/dist/button.54bdc301e714.js'
       Post-processed 'bower_components/bootstrap/js/dist/collapse.js.map' as 'bower_components/bootstrap/js/dist/collapse.js.06bb3239ff4b.map'
       Post-processed 'bower_components/bootstrap/js/dist/carousel.js.map' as 'bower_components/bootstrap/js/dist/carousel.js.cf2a4f28a656.map'
       Post-processed 'bower_components/bootstrap/js/dist/modal.js' as 'bower_components/bootstrap/js/dist/modal.61547b1a110f.js'
       Post-processed 'bower_components/bootstrap/js/dist/scrollspy.js.map' as 'bower_components/bootstrap/js/dist/scrollspy.js.5530e377d860.map'
       Post-processed 'bower_components/bootstrap/js/dist/collapse.js' as 'bower_components/bootstrap/js/dist/collapse.16e85c31092c.js'
       Post-processed 'bower_components/bootstrap/js/dist/util.js.map' as 'bower_components/bootstrap/js/dist/util.js.22b49693aa93.map'
       Post-processed 'bower_components/bootstrap/js/dist/popover.js.map' as 'bower_components/bootstrap/js/dist/popover.js.94b3b8e1077f.map'
       Post-processed 'bower_components/bootstrap/js/dist/button.js.map' as 'bower_components/bootstrap/js/dist/button.js.a2148ad0a226.map'
       Post-processed 'bower_components/bootstrap/js/dist/tab.js.map' as 'bower_components/bootstrap/js/dist/tab.js.ed1a88a6bcec.map'
       Post-processed 'bower_components/bootstrap/js/dist/alert.js' as 'bower_components/bootstrap/js/dist/alert.ab895a44bdbf.js'
       Post-processed 'bower_components/bootstrap/js/dist/dropdown.js.map' as 'bower_components/bootstrap/js/dist/dropdown.js.b841266f812c.map'
       Post-processed 'bower_components/bootstrap/js/dist/tooltip.js.map' as 'bower_components/bootstrap/js/dist/tooltip.js.9bb71caebe3a.map'
       Post-processed 'bower_components/bootstrap/js/dist/tooltip.js' as 'bower_components/bootstrap/js/dist/tooltip.1f2c35b249db.js'
       Post-processed 'bower_components/bootstrap/js/dist/carousel.js' as 'bower_components/bootstrap/js/dist/carousel.dfcc32b4876b.js'
       Post-processed 'bower_components/bootstrap/js/dist/scrollspy.js' as 'bower_components/bootstrap/js/dist/scrollspy.4d2e27569b67.js'
       Post-processed 'bower_components/bootstrap/js/dist/tab.js' as 'bower_components/bootstrap/js/dist/tab.c7a72ec362a5.js'
       Post-processed 'bower_components/bootstrap/js/src/popover.js' as 'bower_components/bootstrap/js/src/popover.e8760a910720.js'
       Post-processed 'bower_components/bootstrap/js/src/util.js' as 'bower_components/bootstrap/js/src/util.8e164ba6bc55.js'
       Post-processed 'bower_components/bootstrap/js/src/dropdown.js' as 'bower_components/bootstrap/js/src/dropdown.a9b6c3fb5dcf.js'
       Post-processed 'bower_components/bootstrap/js/src/button.js' as 'bower_components/bootstrap/js/src/button.25a03bac7e53.js'
       Post-processed 'bower_components/bootstrap/js/src/modal.js' as 'bower_components/bootstrap/js/src/modal.c28fd0107dc4.js'
       Post-processed 'bower_components/bootstrap/js/src/collapse.js' as 'bower_components/bootstrap/js/src/collapse.12d1013b2ae0.js'
       Post-processed 'bower_components/bootstrap/js/src/alert.js' as 'bower_components/bootstrap/js/src/alert.43f6b3f383bc.js'
       Post-processed 'bower_components/bootstrap/js/src/tooltip.js' as 'bower_components/bootstrap/js/src/tooltip.577c7b886c46.js'
       Post-processed 'bower_components/bootstrap/js/src/carousel.js' as 'bower_components/bootstrap/js/src/carousel.71b16783b864.js'
       Post-processed 'bower_components/bootstrap/js/src/scrollspy.js' as 'bower_components/bootstrap/js/src/scrollspy.31b16a295132.js'
       Post-processed 'bower_components/bootstrap/js/src/tab.js' as 'bower_components/bootstrap/js/src/tab.5668d3df19e5.js'
       Post-processed 'bower_components/bootstrap/dist/js/bootstrap.min.js' as 'bower_components/bootstrap/dist/js/bootstrap.min.0ca771b2c6d5.js'
       Post-processed 'bower_components/bootstrap/dist/js/bootstrap.js' as 'bower_components/bootstrap/dist/js/bootstrap.cf2dca74acca.js'
       Post-processed 'bower_components/bootstrap/dist/js/npm.js' as 'bower_components/bootstrap/dist/js/npm.4dab3bd985b9.js'
       Post-processed 'bower_components/bootstrap/dist/css/bootstrap.min.css.map' as 'bower_components/bootstrap/dist/css/bootstrap.min.css.03a950a2cb47.map'
       Post-processed 'bower_components/bootstrap/dist/css/bootstrap.css.map' as 'bower_components/bootstrap/dist/css/bootstrap.css.45fa8d20cc18.map'
       Post-processed 'bower_components/bootstrap/dist/css/bootstrap.min.css' as 'bower_components/bootstrap/dist/css/bootstrap.min.b00faad199b5.css'
       Post-processed 'bower_components/bootstrap/dist/css/bootstrap.css' as 'bower_components/bootstrap/dist/css/bootstrap.be3c08a8b471.css'
       Post-processed 'bower_components/bootstrap/grunt/bs-sass-compile/sass.js' as 'bower_components/bootstrap/grunt/bs-sass-compile/sass.493fc8d98714.js'
       Post-processed 'bower_components/bootstrap/grunt/bs-sass-compile/libsass.js' as 'bower_components/bootstrap/grunt/bs-sass-compile/libsass.05c905c065fd.js'
       Post-processed 'bower_components/bootstrap/scss/mixins/_grid-framework.scss' as 'bower_components/bootstrap/scss/mixins/_grid-framework.15a59f2fd30c.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_size.scss' as 'bower_components/bootstrap/scss/mixins/_size.d21a0400871d.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_image.scss' as 'bower_components/bootstrap/scss/mixins/_image.d762dfd3d6eb.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_cards.scss' as 'bower_components/bootstrap/scss/mixins/_cards.a8df1dd205a5.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_background-variant.scss' as 'bower_components/bootstrap/scss/mixins/_background-variant.6d7ede451418.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_table-row.scss' as 'bower_components/bootstrap/scss/mixins/_table-row.60382810086b.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_hover.scss' as 'bower_components/bootstrap/scss/mixins/_hover.72713228d021.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_gradients.scss' as 'bower_components/bootstrap/scss/mixins/_gradients.1b6221f3921e.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_label.scss' as 'bower_components/bootstrap/scss/mixins/_label.963f3030c2cb.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_text-emphasis.scss' as 'bower_components/bootstrap/scss/mixins/_text-emphasis.d3616b3c298b.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_pagination.scss' as 'bower_components/bootstrap/scss/mixins/_pagination.ea4e7830a4db.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_alert.scss' as 'bower_components/bootstrap/scss/mixins/_alert.83c9e823af2e.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_screen-reader.scss' as 'bower_components/bootstrap/scss/mixins/_screen-reader.f6ee4cf9ad74.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_breakpoints.scss' as 'bower_components/bootstrap/scss/mixins/_breakpoints.b9cada15d575.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_progress.scss' as 'bower_components/bootstrap/scss/mixins/_progress.0adcc3e749ff.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_buttons.scss' as 'bower_components/bootstrap/scss/mixins/_buttons.a084ecce8fb2.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_resize.scss' as 'bower_components/bootstrap/scss/mixins/_resize.a377ab0a14e8.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_pulls.scss' as 'bower_components/bootstrap/scss/mixins/_pulls.4919ebe3dcaf.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_reset-filter.scss' as 'bower_components/bootstrap/scss/mixins/_reset-filter.9f05ff6689dd.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_reset-text.scss' as 'bower_components/bootstrap/scss/mixins/_reset-text.f0623942af01.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_border-radius.scss' as 'bower_components/bootstrap/scss/mixins/_border-radius.913fbc6ed44a.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_text-hide.scss' as 'bower_components/bootstrap/scss/mixins/_text-hide.65b9015e0ebb.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_navbar-align.scss' as 'bower_components/bootstrap/scss/mixins/_navbar-align.222027e5e6a7.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_grid.scss' as 'bower_components/bootstrap/scss/mixins/_grid.7e0cee2ff9bb.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_text-truncate.scss' as 'bower_components/bootstrap/scss/mixins/_text-truncate.d4ae7b238656.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_lists.scss' as 'bower_components/bootstrap/scss/mixins/_lists.c7e34a356a86.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_center-block.scss' as 'bower_components/bootstrap/scss/mixins/_center-block.f284d54e569e.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_forms.scss' as 'bower_components/bootstrap/scss/mixins/_forms.4effa4b653ee.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_list-group.scss' as 'bower_components/bootstrap/scss/mixins/_list-group.9511d7c71b82.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_clearfix.scss' as 'bower_components/bootstrap/scss/mixins/_clearfix.1cd3229b9c73.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_tab-focus.scss' as 'bower_components/bootstrap/scss/mixins/_tab-focus.2dab79127e3b.scss'
       Post-processed 'bower_components/bootstrap/scss/mixins/_nav-divider.scss' as 'bower_components/bootstrap/scss/mixins/_nav-divider.0f0b3705827f.scss'
       Post-processed 'admin/js/vendor/jquery/jquery.js' as 'admin/js/vendor/jquery/jquery.107fbe9555bf.js'
       Post-processed 'admin/js/vendor/jquery/jquery.min.js' as 'admin/js/vendor/jquery/jquery.min.f9c7afd05729.js'
       Post-processed 'admin/js/vendor/jquery/LICENSE-JQUERY.txt' as 'admin/js/vendor/jquery/LICENSE-JQUERY.a158210a2737.txt'
       Post-processed 'admin/js/vendor/xregexp/xregexp.min.js' as 'admin/js/vendor/xregexp/xregexp.min.c95393b8ca4d.js'
       Post-processed 'admin/js/vendor/xregexp/LICENSE-XREGEXP.txt' as 'admin/js/vendor/xregexp/LICENSE-XREGEXP.d64cecf4f157.txt'
       Post-processed 'bower_components/jquery/dist/jquery.js' as 'bower_components/jquery/dist/jquery.107fbe9555bf.js'
       Post-processed 'bower_components/jquery/dist/jquery.min.js' as 'bower_components/jquery/dist/jquery.min.4a356126b957.js'
       Post-processed 'bower_components/jquery/dist/jquery.min.map' as 'bower_components/jquery/dist/jquery.min.2d03a9e84c18.map'
       Post-processed 'bower_components/jquery/src/data.js' as 'bower_components/jquery/src/data.a7d139ed9fad.js'
       Post-processed 'bower_components/jquery/src/manipulation.js' as 'bower_components/jquery/src/manipulation.267172fef0f9.js'
       Post-processed 'bower_components/jquery/src/selector-sizzle.js' as 'bower_components/jquery/src/selector-sizzle.08ef80e78fb1.js'
       Post-processed 'bower_components/jquery/src/jquery.js' as 'bower_components/jquery/src/jquery.78a52bd5eaab.js'
       Post-processed 'bower_components/jquery/src/queue.js' as 'bower_components/jquery/src/queue.d1da21ede59f.js'
       Post-processed 'bower_components/jquery/src/callbacks.js' as 'bower_components/jquery/src/callbacks.14cf65ddcb87.js'
       Post-processed 'bower_components/jquery/src/css.js' as 'bower_components/jquery/src/css.6e0f0b858676.js'
       Post-processed 'bower_components/jquery/src/offset.js' as 'bower_components/jquery/src/offset.d4b3f9d1c493.js'
       Post-processed 'bower_components/jquery/src/intro.js' as 'bower_components/jquery/src/intro.94ff9550f601.js'
       Post-processed 'bower_components/jquery/src/selector.js' as 'bower_components/jquery/src/selector.cdff25b189c9.js'
       Post-processed 'bower_components/jquery/src/core.js' as 'bower_components/jquery/src/core.ef0a4e54bd06.js'
       Post-processed 'bower_components/jquery/src/deferred.js' as 'bower_components/jquery/src/deferred.8ffe49879251.js'
       Post-processed 'bower_components/jquery/src/effects.js' as 'bower_components/jquery/src/effects.ae8eec8d4031.js'
       Post-processed 'bower_components/jquery/src/selector-native.js' as 'bower_components/jquery/src/selector-native.c9ae617e817f.js'
       Post-processed 'bower_components/jquery/src/outro.js' as 'bower_components/jquery/src/outro.0b9c0e7d4b72.js'
       Post-processed 'bower_components/jquery/src/attributes.js' as 'bower_components/jquery/src/attributes.678b4710df14.js'
       Post-processed 'bower_components/jquery/src/wrap.js' as 'bower_components/jquery/src/wrap.3919d6908333.js'
       Post-processed 'bower_components/jquery/src/traversing.js' as 'bower_components/jquery/src/traversing.91cb86870f43.js'
       Post-processed 'bower_components/jquery/src/ajax.js' as 'bower_components/jquery/src/ajax.886bbe79b01d.js'
       Post-processed 'bower_components/jquery/src/serialize.js' as 'bower_components/jquery/src/serialize.72fb5b2f1109.js'
       Post-processed 'bower_components/jquery/src/dimensions.js' as 'bower_components/jquery/src/dimensions.3606c43a5319.js'
       Post-processed 'bower_components/jquery/src/deprecated.js' as 'bower_components/jquery/src/deprecated.55ef50aae575.js'
       Post-processed 'bower_components/jquery/src/event.js' as 'bower_components/jquery/src/event.56aa71f0139a.js'
       Post-processed 'bower_components/bootstrap/nuget/bootstrap.nuspec' as 'bower_components/bootstrap/nuget/bootstrap.c28f716086fd.nuspec'
       Post-processed 'bower_components/bootstrap/nuget/bootstrap.sass.nuspec' as 'bower_components/bootstrap/nuget/bootstrap.sass.84498c857518.nuspec'
       Post-processed 'bower_components/bootstrap/nuget/MyGet.ps1' as 'bower_components/bootstrap/nuget/MyGet.b40d67cb9e93.ps1'
       Post-processed 'bower_components/bootstrap/grunt/change-version.js' as 'bower_components/bootstrap/grunt/change-version.e934259cfe95.js'
       Post-processed 'bower_components/bootstrap/grunt/sauce_browsers.yml' as 'bower_components/bootstrap/grunt/sauce_browsers.31082498b595.yml'
       Post-processed 'bower_components/bootstrap/grunt/bs-commonjs-generator.js' as 'bower_components/bootstrap/grunt/bs-commonjs-generator.e704ea6b033d.js'
       Post-processed 'bower_components/bootstrap/grunt/configBridge.json' as 'bower_components/bootstrap/grunt/configBridge.4d42d1c81d21.json'
       Post-processed 'bower_components/bootstrap/grunt/npm-shrinkwrap.json' as 'bower_components/bootstrap/grunt/npm-shrinkwrap.4bba8997c706.json'
       Post-processed 'bower_components/bootstrap/scss/_nav.scss' as 'bower_components/bootstrap/scss/_nav.85ea844ba95b.scss'
       Post-processed 'bower_components/bootstrap/scss/_utilities-responsive.scss' as 'bower_components/bootstrap/scss/_utilities-responsive.49d079d7a0a0.scss'
       Post-processed 'bower_components/bootstrap/scss/bootstrap-flex.scss' as 'bower_components/bootstrap/scss/bootstrap-flex.db5ce96621bd.scss'
       Post-processed 'bower_components/bootstrap/scss/_labels.scss' as 'bower_components/bootstrap/scss/_labels.96938fed6359.scss'
       Post-processed 'bower_components/bootstrap/scss/_print.scss' as 'bower_components/bootstrap/scss/_print.05e6dc43acb6.scss'
       Post-processed 'bower_components/bootstrap/scss/_utilities.scss' as 'bower_components/bootstrap/scss/_utilities.83cbcf672359.scss'
       Post-processed 'bower_components/bootstrap/scss/_breadcrumb.scss' as 'bower_components/bootstrap/scss/_breadcrumb.ccd5915f101a.scss'
       Post-processed 'bower_components/bootstrap/scss/_carousel.scss' as 'bower_components/bootstrap/scss/_carousel.ad928f4c3d44.scss'
       Post-processed 'bower_components/bootstrap/scss/_modal.scss' as 'bower_components/bootstrap/scss/_modal.8470b0938395.scss'
       Post-processed 'bower_components/bootstrap/scss/_dropdown.scss' as 'bower_components/bootstrap/scss/_dropdown.199469610263.scss'
       Post-processed 'bower_components/bootstrap/scss/_card.scss' as 'bower_components/bootstrap/scss/_card.2bbe26f3f209.scss'
       Post-processed 'bower_components/bootstrap/scss/_pagination.scss' as 'bower_components/bootstrap/scss/_pagination.0e32b328262b.scss'
       Post-processed 'bower_components/bootstrap/scss/_alert.scss' as 'bower_components/bootstrap/scss/_alert.9edf1606c749.scss'
       Post-processed 'bower_components/bootstrap/scss/bootstrap-grid.scss' as 'bower_components/bootstrap/scss/bootstrap-grid.4e28949b1c8f.scss'
       Post-processed 'bower_components/bootstrap/scss/_type.scss' as 'bower_components/bootstrap/scss/_type.57b3b5c7007b.scss'
       Post-processed 'bower_components/bootstrap/scss/_variables.scss' as 'bower_components/bootstrap/scss/_variables.361c2c962622.scss'
       Post-processed 'bower_components/bootstrap/scss/_media.scss' as 'bower_components/bootstrap/scss/_media.0605c6aaad6c.scss'
       Post-processed 'bower_components/bootstrap/scss/_reboot.scss' as 'bower_components/bootstrap/scss/_reboot.ad0cee2aa089.scss'
       Post-processed 'bower_components/bootstrap/scss/_button-group.scss' as 'bower_components/bootstrap/scss/_button-group.2a67246f2270.scss'
       Post-processed 'bower_components/bootstrap/scss/_progress.scss' as 'bower_components/bootstrap/scss/_progress.9d04316f8cc1.scss'
       Post-processed 'bower_components/bootstrap/scss/_images.scss' as 'bower_components/bootstrap/scss/_images.c9e9a08e9844.scss'
       Post-processed 'bower_components/bootstrap/scss/_utilities-spacing.scss' as 'bower_components/bootstrap/scss/_utilities-spacing.7c50145ff2ae.scss'
       Post-processed 'bower_components/bootstrap/scss/_buttons.scss' as 'bower_components/bootstrap/scss/_buttons.84734b9c1245.scss'
       Post-processed 'bower_components/bootstrap/scss/_close.scss' as 'bower_components/bootstrap/scss/_close.8df764230b20.scss'
       Post-processed 'bower_components/bootstrap/scss/_custom-forms.scss' as 'bower_components/bootstrap/scss/_custom-forms.3a59d7f23719.scss'
       Post-processed 'bower_components/bootstrap/scss/_pager.scss' as 'bower_components/bootstrap/scss/_pager.e20bd44ec63f.scss'
       Post-processed 'bower_components/bootstrap/scss/_mixins.scss' as 'bower_components/bootstrap/scss/_mixins.f536eb119b65.scss'
       Post-processed 'bower_components/bootstrap/scss/bootstrap-reboot.scss' as 'bower_components/bootstrap/scss/bootstrap-reboot.d9a56c557d07.scss'
       Post-processed 'bower_components/bootstrap/scss/bootstrap.scss' as 'bower_components/bootstrap/scss/bootstrap.9d64566ad696.scss'
       Post-processed 'bower_components/bootstrap/scss/_tables.scss' as 'bower_components/bootstrap/scss/_tables.edaecc13e0a5.scss'
       Post-processed 'bower_components/bootstrap/scss/_tooltip.scss' as 'bower_components/bootstrap/scss/_tooltip.47d458f3c61f.scss'
       Post-processed 'bower_components/bootstrap/scss/_grid.scss' as 'bower_components/bootstrap/scss/_grid.13f8ee23385a.scss'
       Post-processed 'bower_components/bootstrap/scss/_utilities-background.scss' as 'bower_components/bootstrap/scss/_utilities-background.1e536415749d.scss'
       Post-processed 'bower_components/bootstrap/scss/_jumbotron.scss' as 'bower_components/bootstrap/scss/_jumbotron.d72427e86bf2.scss'
       Post-processed 'bower_components/bootstrap/scss/_navbar.scss' as 'bower_components/bootstrap/scss/_navbar.6e190d1f1eef.scss'
       Post-processed 'bower_components/bootstrap/scss/_forms.scss' as 'bower_components/bootstrap/scss/_forms.958cc20f8af5.scss'
       Post-processed 'bower_components/bootstrap/scss/_normalize.scss' as 'bower_components/bootstrap/scss/_normalize.58c69c52111a.scss'
       Post-processed 'bower_components/bootstrap/scss/_list-group.scss' as 'bower_components/bootstrap/scss/_list-group.f1927b21953e.scss'
       Post-processed 'bower_components/bootstrap/scss/_code.scss' as 'bower_components/bootstrap/scss/_code.e2cbc7367b05.scss'
       Post-processed 'bower_components/bootstrap/scss/_popover.scss' as 'bower_components/bootstrap/scss/_popover.0bf2478aa7d5.scss'
       Post-processed 'bower_components/bootstrap/scss/_input-group.scss' as 'bower_components/bootstrap/scss/_input-group.338efb288265.scss'
       Post-processed 'bower_components/bootstrap/scss/_responsive-embed.scss' as 'bower_components/bootstrap/scss/_responsive-embed.430088eb3343.scss'
       Post-processed 'bower_components/bootstrap/scss/_animation.scss' as 'bower_components/bootstrap/scss/_animation.8e6676eb56b7.scss'
       Post-processed 'admin/img/gis/move_vertex_on.svg' as 'admin/img/gis/move_vertex_on.0047eba25b67.svg'
       Post-processed 'admin/img/gis/move_vertex_off.svg' as 'admin/img/gis/move_vertex_off.7a23bf31ef8a.svg'
       Post-processed 'admin/js/admin/RelatedObjectLookups.js' as 'admin/js/admin/RelatedObjectLookups.36c818a27bcc.js'
       Post-processed 'admin/js/admin/DateTimeShortcuts.js' as 'admin/js/admin/DateTimeShortcuts.fa515fdd6bee.js'
       Post-processed 'bower_components/jquery/bower.json' as 'bower_components/jquery/bower.6a8b4abd87d1.json'
       Post-processed 'bower_components/jquery/MIT-LICENSE.txt' as 'bower_components/jquery/MIT-LICENSE.14f9e86644ba.txt'
       Post-processed 'bower_components/bootstrap/LICENSE' as 'bower_components/bootstrap/LICENSE.86047de20b32'
       Post-processed 'bower_components/bootstrap/Gemfile.lock' as 'bower_components/bootstrap/Gemfile.461ad9647e24.lock'
       Post-processed 'bower_components/bootstrap/bower.json' as 'bower_components/bootstrap/bower.a9b503832bbd.json'
       Post-processed 'bower_components/bootstrap/Gemfile' as 'bower_components/bootstrap/Gemfile.29c25592357e'
       Post-processed 'bower_components/bootstrap/package.js' as 'bower_components/bootstrap/package.b1a0d2b8fa6f.js'
       Post-processed 'bower_components/bootstrap/README.md' as 'bower_components/bootstrap/README.58756ad9f287.md'
       Post-processed 'bower_components/bootstrap/CHANGELOG.md' as 'bower_components/bootstrap/CHANGELOG.f2a4904d02b7.md'
       Post-processed 'bower_components/bootstrap/package.json' as 'bower_components/bootstrap/package.e6c9287c30f7.json'
       Post-processed 'bower_components/bootstrap/Gruntfile.js' as 'bower_components/bootstrap/Gruntfile.f556bb09cbb0.js'
       Post-processed 'bower_components/bootstrap/sache.json' as 'bower_components/bootstrap/sache.1baf9b2a08db.json'
       Post-processed 'admin/img/LICENSE' as 'admin/img/LICENSE.2c54f4e1ca1c'
       Post-processed 'admin/img/icon-clock.svg' as 'admin/img/icon-clock.e1d4dfac3f2b.svg'
       Post-processed 'admin/img/inline-delete.svg' as 'admin/img/inline-delete.fec1b761f254.svg'
       Post-processed 'admin/img/calendar-icons.svg' as 'admin/img/calendar-icons.39b290681a8b.svg'
       Post-processed 'admin/img/icon-calendar.svg' as 'admin/img/icon-calendar.ac7aea671bea.svg'
       Post-processed 'admin/img/search.svg' as 'admin/img/search.7cf54ff789c6.svg'
       Post-processed 'admin/img/README.txt' as 'admin/img/README.837277fa1908.txt'
       Post-processed 'admin/img/icon-deletelink.svg' as 'admin/img/icon-deletelink.564ef9dc3854.svg'
       Post-processed 'admin/img/icon-changelink.svg' as 'admin/img/icon-changelink.18d2fd706348.svg'
       Post-processed 'admin/img/icon-unknown.svg' as 'admin/img/icon-unknown.a18cb4398978.svg'
       Post-processed 'admin/img/icon-addlink.svg' as 'admin/img/icon-addlink.d519b3bab011.svg'
       Post-processed 'admin/img/icon-alert.svg' as 'admin/img/icon-alert.034cc7d8a67f.svg'
       Post-processed 'admin/img/icon-unknown-alt.svg' as 'admin/img/icon-unknown-alt.81536e128bb6.svg'
       Post-processed 'admin/img/icon-no.svg' as 'admin/img/icon-no.439e821418cd.svg'
       Post-processed 'admin/img/sorting-icons.svg' as 'admin/img/sorting-icons.3a097b59f104.svg'
       Post-processed 'admin/img/icon-yes.svg' as 'admin/img/icon-yes.d2f9f035226a.svg'
       Post-processed 'admin/img/selector-icons.svg' as 'admin/img/selector-icons.b4555096cea2.svg'
       Post-processed 'admin/img/tooltag-add.svg' as 'admin/img/tooltag-add.e59d620a9742.svg'
       Post-processed 'admin/img/tooltag-arrowright.svg' as 'admin/img/tooltag-arrowright.bbfb788a849e.svg'
       Post-processed 'admin/js/actions.min.js' as 'admin/js/actions.min.c8d91e1d05fe.js'
       Post-processed 'admin/js/timeparse.js' as 'admin/js/timeparse.51258861a46a.js'
       Post-processed 'admin/js/prepopulate.js' as 'admin/js/prepopulate.ff9208865444.js'
       Post-processed 'admin/js/calendar.js' as 'admin/js/calendar.847972dc11ca.js'
       Post-processed 'admin/js/actions.js' as 'admin/js/actions.df9119bcc981.js'
       Post-processed 'admin/js/collapse.min.js' as 'admin/js/collapse.min.dc930adb2821.js'
       Post-processed 'admin/js/SelectFilter2.js' as 'admin/js/SelectFilter2.92ca1fea6656.js'
       Post-processed 'admin/js/SelectBox.js' as 'admin/js/SelectBox.9b544c47149c.js'
       Post-processed 'admin/js/core.js' as 'admin/js/core.55f19d9d5953.js'
       Post-processed 'admin/js/urlify.js' as 'admin/js/urlify.72f9b26e3ecd.js'
       Post-processed 'admin/js/collapse.js' as 'admin/js/collapse.17d715df2104.js'
       Post-processed 'admin/js/prepopulate.min.js' as 'admin/js/prepopulate.min.f4057ebb9b62.js'
       Post-processed 'admin/js/inlines.min.js' as 'admin/js/inlines.min.91c080dc1cbf.js'
       Post-processed 'admin/js/inlines.js' as 'admin/js/inlines.8199258210ef.js'
       Post-processed 'admin/js/jquery.init.js' as 'admin/js/jquery.init.95b62fa19378.js'
       Post-processed 'admin/css/fonts.css' as 'admin/css/fonts.cc6140298ba7.css'
       Post-processed 'admin/css/forms.css' as 'admin/css/forms.70b858e61281.css'
       Post-processed 'admin/css/changelists.css' as 'admin/css/changelists.32a12db9a480.css'
       Post-processed 'admin/css/dashboard.css' as 'admin/css/dashboard.4898e2e9983d.css'
       Post-processed 'admin/css/widgets.css' as 'admin/css/widgets.a7251c097987.css'
       Post-processed 'admin/css/rtl.css' as 'admin/css/rtl.e024aaf6df25.css'
       Post-processed 'admin/css/login.css' as 'admin/css/login.a846c0e2ef65.css'
       Post-processed 'admin/css/base.css' as 'admin/css/base.9f6547179ace.css'
       Post-processed 'admin/fonts/Roboto-Light-webfont.woff' as 'admin/fonts/Roboto-Light-webfont.b446c2399bb6.woff'
       Post-processed 'admin/fonts/Roboto-Bold-webfont.woff' as 'admin/fonts/Roboto-Bold-webfont.2ad99072841e.woff'
       Post-processed 'admin/fonts/README.txt' as 'admin/fonts/README.2c3d0bcdede2.txt'
       Post-processed 'admin/fonts/Roboto-Regular-webfont.woff' as 'admin/fonts/Roboto-Regular-webfont.ec39515ae8c6.woff'
       Post-processed 'admin/fonts/LICENSE.txt' as 'admin/fonts/LICENSE.d273d63619c9.txt'
       291 static files copied to '/app/staticfiles', 291 post-processed.
-----> Running post-compile hook
-----> I'm post-compile hook
-----> Running run_collectstatic
-----> Collecting static files
       Post-processed 'bower_components/bootstrap/dist/css/bootstrap.min.css' as 'bower_components/bootstrap/dist/css/bootstrap.min.b00faad199b5.css'
       Post-processed 'bower_components/bootstrap/dist/css/bootstrap.css' as 'bower_components/bootstrap/dist/css/bootstrap.be3c08a8b471.css'
       Post-processed 'admin/css/fonts.css' as 'admin/css/fonts.cc6140298ba7.css'
       Post-processed 'admin/css/forms.css' as 'admin/css/forms.70b858e61281.css'
       Post-processed 'admin/css/changelists.css' as 'admin/css/changelists.32a12db9a480.css'
       Post-processed 'admin/css/dashboard.css' as 'admin/css/dashboard.4898e2e9983d.css'
       Post-processed 'admin/css/widgets.css' as 'admin/css/widgets.a7251c097987.css'
       Post-processed 'admin/css/rtl.css' as 'admin/css/rtl.e024aaf6df25.css'
       Post-processed 'admin/css/login.css' as 'admin/css/login.a846c0e2ef65.css'
       Post-processed 'admin/css/base.css' as 'admin/css/base.9f6547179ace.css'
       0 static files copied to '/app/staticfiles', 291 unmodified, 10 post-processed.
-----> Running run_compress
-----> Compressing static files
       Found 'compress' tags in:
       	/app/portland_python/templates/flatpages/default.html
       	/app/portland_python/templates/404.html
       	/app/portland_python/templates/base_generic.html
       	/app/portland_python/templates/home.html
       Compressing... done
       Compressed 2 block(s) from 4 template(s) for 1 context(s).
-----> Post-compile done
-----> Discovering process types
       Procfile declares types -> web
-----> Compressing...
       Done: 61.9M
-----> Launching...
       Released v5
       https://test-portlandpdx.herokuapp.com/ deployed to Heroku

I see the "Coming soon..." Thanks so much Aleck! " :+1:


Search crash when several languages are selected

Bug Report
Expected behavior/code
A user should be able to search courses available in several languages
Actual Behavior
If user wants to filter with several languages, the search crash.
Steps to Reproduce

Go to the search page
In the sidebar, in the languages filter pane, select several languages
Boom, the search crash

Environment

Richie version: 2.14.0
Platform: Mac OS

Possible Solution
Investigate why elasticsearch returns a 400 Bad request in this case.
Additional context/screenshots
{"errors":{"languages":["Select a valid choice. en,ar is not one of the available choices."]}}

In fact the backend is expecting multiple languages as /api/v1.0/courses/?languages=fr&languages=en (see https://github.com/openfun/richie/blob/master/tests/apps/search/test_query_courses_facets.py#L940).
The frontend queries with: /api/v1.0/courses/?languages=fr,en
This bug is the first example in Richie of a bug that could only be avoided with e2e tests :man_shrugging:...


Externalize the Status codelist

Placename status is currently a standard classification currently borrowed from the Registry ontology, but embedded in the placenames.ttl ontology graph. The classification should either be
(i) replaced by a more suitable list of statuses, published externally
(ii) externalised and made available also for other purposes
(iii) replaced by reference to the original items at their purl.org URIs

Inbuilt status codelist updated to

informal
official

gazetted
release
published
retired

See https://github.com/GeoscienceAustralia/Place-Names/pull/26 and http://linked.data.gov.au/def/placenames


Use more robust and idiomatic way of getting version

Providing shell: bash ensures that this also works on Windows without problems.
Using the steps outputs instead of an environment variable to pass the version value seems more idiomatic on GitHub Actions.

I'll add you to the contributor file if you agree with that. Comment in the related PR if not. 😉
@all-contributors please add @svenstaro  for example

@all-contributors please add @svenstaro  for example


How  to query graph data via JDBC?

OrientDB Version, operating system, or hardware.

v2.2.12

Operating System

Linux

Expected behavior and actual behavior
Error prompt is this way, and how to get the graph vertex data?
Exception in thread "main" java.lang.ClassCastException: com.orientechnologies.orient.jdbc.OrientJdbcResultSet cannot be cast to com.tinkerpop.blueprints.impls.orient.OrientVertex
Steps to reproduce the problem
Class.forName("com.orientechnologies.orient.jdbc.OrientJdbcDriver");

Properties info = new Properties();
info.put("user", "orientdb");
info.put("password", "orientdb");
info.put("db.usePool", "true");
info.put("db.pool.min", "1");
info.put("db.pool.max", "10");

Connection conn = (OrientJdbcConnection) DriverManager.getConnection("jdbc:orient:remote:localhost/mydb", info);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT expand(both(enemy)) FROM v2000 WHERE id=1");

while (rs.next()) {
	OrientVertex vetex = (OrientVertex) rs; // error here
	int id = vetex.getProperty("id");
	System.out.println("id is " + id);
}

The JDBC api can't return native objects because it is plain old JDBC.
Usually, the JDBC driver is used inside legacy applications to avoid use of native objects.
If you need native objects, you should use the native API.

@robfrank ok,thank you so much! The native API works properly.
final Object result =
graph
.command(new OCommandSQL(
		"SELECT expand(both(enemy)) FROM v2000 WHERE id=1"))
.execute();

if (result instanceof OrientDynaElementIterable) {
	OrientDynaElementIterable it = (OrientDynaElementIterable) result;
	for (Object obj : it) {
		OrientVertex vertex = (OrientVertex) obj;
		int id = vertex.getProperty("id");
		System.out.println("id=" + id);
	}
}


Add test-tube/s icon/s and improve metadata for lab icons

Nice icon.
But I'm not sure about the single test tube designed at an angle.
Looking at the other chemistry glass icons, they are all not angled. So to make this constant, should this one not be angled as well? I kinda like the design tho, so maybe add it as a separate one? Or what do you think?

add it as a separate one?

Implemented… Also, I made all the liquid levels consistent.


Cannot run suid programs

We are trying to run sudo inside the alpine docker image and it fails with:
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges
This may be related:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=683205

The problem is with the registration strings, it is missing the correct flags (POC, needs to be added as suffix) just as @amon-ra  mentions. I have verified that if you use the upstream binfmt configuration script  that sudo works on emulated CPUs.

I just opened a PR (#23) which uses the official script to configure binfmt

I'm getting this today on version 2.12

Should this bug be fixed in 2.12?

I also have this problem. Is there any way we can solve this?

Appears to be solved with docker run --rm --privileged multiarch/qemu-user-static:register --reset --credential yes

@amon-ra Could you solve this issue? are you fine to close this ticket?

Now better alternative.
$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes --credential yes

$ cat /proc/sys/fs/binfmt_misc/qemu-aarch64
enabled
interpreter /usr/bin/qemu-aarch64-static
flags: OCF
offset 0
magic 7f454c460201010000000000000000000200b700
mask ffffffffffffff00fffffffffffffffffeffffff

$ docker run --rm -it arm64v8/debian bash

# apt-get -y update
# apt-get -y install sudo

$ docker run --rm -it arm64v8/debian bash

Then below command works in the container. I do not know the warning "/bin/ls: /etc/sudoers: Function not implemented".
# apt-get -y update
# apt-get -y install sudo
# echo "test_user ALL = NOPASSWD: ALL" >> /etc/sudoers
# useradd -m test_user
# su - test_user
$ sudo ls -l /etc/sudoers
/bin/ls: /etc/sudoers: Function not implemented
-r--r----- 1 root root 699 Aug  6 13:01 /etc/sudoers

I close this ticket. But feel free to reopen if you need something.
Thanks.


Refactor ApiComposer for simpler logic

Many small changes in ApiComposer, mostly for readbility and easier parameter passing:

Simpler passing of initial assumptions
Better separation between ApiComposer / Composre / ComposerBuilder (ApiComposer & Composer itself previously took some parts that better should be in ComposerBuilder)
Some simplification of preset logic and code duplication removal

Hello @gkirgizov! Thanks for opening this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file cases/multi_modal_genre_prediction.py:

Line 46:121: E501 line too long (122 > 120 characters)


[video_player] Adding a fix for video player alignment issues on iPhone 12Pro

Description
Video player was experiencing alignment issues on iPhone12 Pro device
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[ ] My PR includes unit or integration tests for all changed/updated/fixed behaviors (See Contributor Guide).
[ ] All existing and new tests are passing.
[ ] I updated/added relevant documentation (doc comments with ///).
[ ] The analyzer (flutter analyze) does not report any problems on my PR.
[ ] I read and followed the Flutter Style Guide.
[ ] The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
[ ] I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy.
[ ] I updated CHANGELOG.md to add a description of the change.
[x] I signed the CLA.
[x] I am willing to follow-up on review comments in a timely manner.

Breaking Change
Does your PR require plugin users to manually update their apps to accommodate your change?

[ ] Yes, this is a breaking change (please indicate a breaking change in CHANGELOG.md and increment major revision).
[x] No, this is not a breaking change.

@googlebot I signed it!

I'm going to close the PR because the CLA is not signed. Feel free to ping me when the CLA is signed and I'll re-open the PR. Or you can open a new PR after signing the CLA.

I'm going to close the PR because the CLA is not signed. Feel free to ping me when the CLA is signed and I'll re-open the PR. Or you can open a new PR after signing the CLA.


Add fetch.max.bytes to KafkaConsumerConfig

There is consumer setting fetch.max.bytes with default value 52428800 in kafka after 0.11.0 version. It's missed from KafkaConsumerConfig.

I will try to submit PR on the weekend


Music Volume Setting

Description
Add a music volume slider in the settings page to control the volume of the music in game.
Milestones
List of sub-features you intend to have done and in Master by the end of the sprint.

[x] Add slider
[x] Save setting
[x] ForestGameArea uses volume setting to change volume

Added in c2680bb commit.